Introducing the Sys and Unix
The modules that give access to the system in OCaml are:- Sys - functions common to all OS's that run OCaml
- Unix - functions specific to unix
NOTE that Unix and Sys can overwrite some of the functions in the Pervasive module, so to access a function from the Pervasive module you need to add Pervasives. in front of the function call.
When using ocamlc to compile OCaml programs that made use of Unix, you need to pass unix.cma to the compiler e.g.
$ ocamlc unix.cma hello.ml -o hello
The same is not true of sys.cma
PASSING INFORMATION TO YOUR PROGRAM
Now we are going to consider 2 different ways of passing information from your terminal to your ocaml program1) Passing the information as arguments to the executable. For this we are going to use Sys.argv which will return a string array of arguments passed to the program. The first index of the argument array that we use here is 1, this is because the 0th element in the array is the command used to call the program. Consider the following simple example:
open Sys;;
print_string argv.(1)
print_string argv.(1)
Now provided that at least one argument is passed to the program, this argument will be printed. We can now extend this program, to print the number of arguments and then exactly what the user will have just entered
open Sys;;
let args = Array.length argv;;
print_int args ;;
print_newline ();;
for i=0 to args-1 do
print_string argv.(i);
print_char ' ';
done;
2a ) Passing information using the environment variables, this can be fetched from within the OCaml programing using Sys.enviroment, this will return as array of environment variableslet args = Array.length argv;;
print_int args ;;
print_newline ();;
for i=0 to args-1 do
print_string argv.(i);
print_char ' ';
done;
open Unix;;
let env = environment();;
for i=0 to (Array.length env) -1 do
print_string env.(i);
print_newline);
done;
Don't forget then when you compile this, you need to add unix.cma to the command as we are making use of the Unix library
2b ) We can also lookup the values of environment variables using the Sys.getenv (or Unix.getenv) functions that takes a variable name and returns the value associated with it
open Sys;;
let var = argv.(1);;
print_string (getenv var)
Exceptions
Unless otherwise stated in the documentation, all function in the Unix module raise the exception Unix_error.Exception Unix_error of error * string * string
The first argument is the error code, the second argument is the name of the system call that raised the error and third argument identifies the object on which the error was called.
If an exception reaches the top-level then the program will halt. The Unix module provides a function for clearly describing exceptions. We can make 2a use this function as follows:
open Unix;;
let prog () =
let env = environment();;
for i=0 to (Array.length env) -1 do
print_string env.(i);
print_newline);
done;
done;
handle_unix_error prog ();;
Thanks for your ideas. You can also find the details on Affity Solutions, at the System Programming. The main object of the Affity Solutions is to provide quality web services and best training of software languages.
ReplyDelete