1UnixLabels(3) OCaml library UnixLabels(3)
2
3
4
6 UnixLabels - Interface to the Unix system.
7
9 Module UnixLabels
10
12 Module UnixLabels
13 : sig end
14
15
16 Interface to the Unix system. To use as replacement to default Unix
17 module, add module Unix = UnixLabels in your implementation.
18
19
20
21
22
23
24
25 Error report
26 type error = Unix.error =
27 | E2BIG (* Argument list too long
28 *)
29 | EACCES (* Permission denied
30 *)
31 | EAGAIN (* Resource temporarily unavailable; try again
32 *)
33 | EBADF (* Bad file descriptor
34 *)
35 | EBUSY (* Resource unavailable
36 *)
37 | ECHILD (* No child process
38 *)
39 | EDEADLK (* Resource deadlock would occur
40 *)
41 | EDOM (* Domain error for math functions, etc.
42 *)
43 | EEXIST (* File exists
44 *)
45 | EFAULT (* Bad address
46 *)
47 | EFBIG (* File too large
48 *)
49 | EINTR (* Function interrupted by signal
50 *)
51 | EINVAL (* Invalid argument
52 *)
53 | EIO (* Hardware I/O error
54 *)
55 | EISDIR (* Is a directory
56 *)
57 | EMFILE (* Too many open files by the process
58 *)
59 | EMLINK (* Too many links
60 *)
61 | ENAMETOOLONG (* Filename too long
62 *)
63 | ENFILE (* Too many open files in the system
64 *)
65 | ENODEV (* No such device
66 *)
67 | ENOENT (* No such file or directory
68 *)
69 | ENOEXEC (* Not an executable file
70 *)
71 | ENOLCK (* No locks available
72 *)
73 | ENOMEM (* Not enough memory
74 *)
75 | ENOSPC (* No space left on device
76 *)
77 | ENOSYS (* Function not supported
78 *)
79 | ENOTDIR (* Not a directory
80 *)
81 | ENOTEMPTY (* Directory not empty
82 *)
83 | ENOTTY (* Inappropriate I/O control operation
84 *)
85 | ENXIO (* No such device or address
86 *)
87 | EPERM (* Operation not permitted
88 *)
89 | EPIPE (* Broken pipe
90 *)
91 | ERANGE (* Result too large
92 *)
93 | EROFS (* Read-only file system
94 *)
95 | ESPIPE (* Invalid seek e.g. on a pipe
96 *)
97 | ESRCH (* No such process
98 *)
99 | EXDEV (* Invalid link
100 *)
101 | EWOULDBLOCK (* Operation would block
102 *)
103 | EINPROGRESS (* Operation now in progress
104 *)
105 | EALREADY (* Operation already in progress
106 *)
107 | ENOTSOCK (* Socket operation on non-socket
108 *)
109 | EDESTADDRREQ (* Destination address required
110 *)
111 | EMSGSIZE (* Message too long
112 *)
113 | EPROTOTYPE (* Protocol wrong type for socket
114 *)
115 | ENOPROTOOPT (* Protocol not available
116 *)
117 | EPROTONOSUPPORT (* Protocol not supported
118 *)
119 | ESOCKTNOSUPPORT (* Socket type not supported
120 *)
121 | EOPNOTSUPP (* Operation not supported on socket
122 *)
123 | EPFNOSUPPORT (* Protocol family not supported
124 *)
125 | EAFNOSUPPORT (* Address family not supported by protocol family
126 *)
127 | EADDRINUSE (* Address already in use
128 *)
129 | EADDRNOTAVAIL (* Can't assign requested address
130 *)
131 | ENETDOWN (* Network is down
132 *)
133 | ENETUNREACH (* Network is unreachable
134 *)
135 | ENETRESET (* Network dropped connection on reset
136 *)
137 | ECONNABORTED (* Software caused connection abort
138 *)
139 | ECONNRESET (* Connection reset by peer
140 *)
141 | ENOBUFS (* No buffer space available
142 *)
143 | EISCONN (* Socket is already connected
144 *)
145 | ENOTCONN (* Socket is not connected
146 *)
147 | ESHUTDOWN (* Can't send after socket shutdown
148 *)
149 | ETOOMANYREFS (* Too many references: can't splice
150 *)
151 | ETIMEDOUT (* Connection timed out
152 *)
153 | ECONNREFUSED (* Connection refused
154 *)
155 | EHOSTDOWN (* Host is down
156 *)
157 | EHOSTUNREACH (* No route to host
158 *)
159 | ELOOP (* Too many levels of symbolic links
160 *)
161 | EOVERFLOW (* File size or position not representable
162 *)
163 | EUNKNOWNERR of int
164 (* Unknown error
165 *)
166
167
168 The type of error codes. Errors defined in the POSIX standard and
169 additional errors from UNIX98 and BSD. All other errors are mapped to
170 EUNKNOWNERR.
171
172
173
174 exception Unix_error of error * string * string
175
176
177 Raised by the system calls below when an error is encountered. The
178 first component is the error code; the second component is the function
179 name; the third component is the string parameter to the function, if
180 it has one, or the empty string otherwise.
181
182
183
184 val error_message : error -> string
185
186 Return a string describing the given error code.
187
188
189
190 val handle_unix_error : ('a -> 'b) -> 'a -> 'b
191
192
193 handle_unix_error f x applies f to x and returns the result. If the
194 exception Unix_error is raised, it prints a message describing the
195 error and exits with code 2.
196
197
198
199
200 Access to the process environment
201 val environment : unit -> string array
202
203 Return the process environment, as an array of strings with the format
204 ``variable=value''.
205
206
207
208 val getenv : string -> string
209
210 Return the value associated to a variable in the process environment.
211 Raise Not_found if the variable is unbound. (This function is identi‐
212 cal to Sys.getenv .)
213
214
215
216 val unsafe_getenv : string -> string
217
218 Return the value associated to a variable in the process environment.
219
220 Unlike UnixLabels.getenv , this function returns the value even if the
221 process has special privileges. It is considered unsafe because the
222 programmer of a setuid or setgid program must be careful to avoid using
223 maliciously crafted environment variables in the search path for exe‐
224 cutables, the locations for temporary files or logs, and the like.
225
226
227 Since 4.06.0
228
229
230 Raises Not_found if the variable is unbound.
231
232
233
234 val putenv : string -> string -> unit
235
236
237 Unix.putenv name value sets the value associated to a variable in the
238 process environment. name is the name of the environment variable, and
239 value its new associated value.
240
241
242
243
244 Process handling
245 type process_status = Unix.process_status =
246 | WEXITED of int
247 (* The process terminated normally by exit ; the argument is the
248 return code.
249 *)
250 | WSIGNALED of int
251 (* The process was killed by a signal; the argument is the signal
252 number.
253 *)
254 | WSTOPPED of int
255 (* The process was stopped by a signal; the argument is the signal
256 number.
257 *)
258
259
260 The termination status of a process. See module Sys for the defini‐
261 tions of the standard signal numbers. Note that they are not the num‐
262 bers used by the OS.
263
264
265 type wait_flag = Unix.wait_flag =
266 | WNOHANG (* do not block if no child has died yet, but immediately
267 return with a pid equal to 0.
268 *)
269 | WUNTRACED (* report also the children that receive stop signals.
270 *)
271
272
273 Flags for UnixLabels.waitpid .
274
275
276
277 val execv : prog:string -> args:string array -> 'a
278
279
280 execv prog args execute the program in file prog , with the arguments
281 args , and the current process environment. These execv* functions
282 never return: on success, the current program is replaced by the new
283 one; on failure, a UnixLabels.Unix_error exception is raised.
284
285
286
287 val execve : prog:string -> args:string array -> env:string array -> 'a
288
289 Same as UnixLabels.execv , except that the third argument provides the
290 environment to the program executed.
291
292
293
294 val execvp : prog:string -> args:string array -> 'a
295
296 Same as UnixLabels.execv , except that the program is searched in the
297 path.
298
299
300
301 val execvpe : prog:string -> args:string array -> env:string array ->
302 'a
303
304 Same as UnixLabels.execve , except that the program is searched in the
305 path.
306
307
308
309 val fork : unit -> int
310
311 Fork a new process. The returned integer is 0 for the child process,
312 the pid of the child process for the parent process.
313
314
315
316 val wait : unit -> int * process_status
317
318 Wait until one of the children processes die, and return its pid and
319 termination status.
320
321
322
323 val waitpid : mode:wait_flag list -> int -> int * process_status
324
325 Same as UnixLabels.wait , but waits for the child process whose pid is
326 given. A pid of -1 means wait for any child. A pid of 0 means wait
327 for any child in the same process group as the current process. Nega‐
328 tive pid arguments represent process groups. The list of options indi‐
329 cates whether waitpid should return immediately without waiting, or
330 also report stopped children.
331
332
333
334 val system : string -> process_status
335
336 Execute the given command, wait until it terminates, and return its
337 termination status. The string is interpreted by the shell /bin/sh and
338 therefore can contain redirections, quotes, variables, etc. The result
339 WEXITED 127 indicates that the shell couldn't be executed.
340
341
342
343 val getpid : unit -> int
344
345 Return the pid of the process.
346
347
348
349 val getppid : unit -> int
350
351 Return the pid of the parent process.
352
353
354
355 val nice : int -> int
356
357 Change the process priority. The integer argument is added to the
358 ``nice'' value. (Higher values of the ``nice'' value mean lower priori‐
359 ties.) Return the new nice value.
360
361
362
363
364 Basic file input/output
365 type file_descr = Unix.file_descr
366
367
368 The abstract type of file descriptors.
369
370
371
372 val stdin : file_descr
373
374 File descriptor for standard input.
375
376
377
378 val stdout : file_descr
379
380 File descriptor for standard output.
381
382
383
384 val stderr : file_descr
385
386 File descriptor for standard error.
387
388
389 type open_flag = Unix.open_flag =
390 | O_RDONLY (* Open for reading
391 *)
392 | O_WRONLY (* Open for writing
393 *)
394 | O_RDWR (* Open for reading and writing
395 *)
396 | O_NONBLOCK (* Open in non-blocking mode
397 *)
398 | O_APPEND (* Open for append
399 *)
400 | O_CREAT (* Create if nonexistent
401 *)
402 | O_TRUNC (* Truncate to 0 length if existing
403 *)
404 | O_EXCL (* Fail if existing
405 *)
406 | O_NOCTTY (* Don't make this dev a controlling tty
407 *)
408 | O_DSYNC (* Writes complete as `Synchronised I/O data integrity com‐
409 pletion'
410 *)
411 | O_SYNC (* Writes complete as `Synchronised I/O file integrity com‐
412 pletion'
413 *)
414 | O_RSYNC (* Reads complete as writes (depending on O_SYNC/O_DSYNC)
415 *)
416 | O_SHARE_DELETE (* Windows only: allow the file to be deleted while
417 still open
418 *)
419 | O_CLOEXEC (* Set the close-on-exec flag on the descriptor returned
420 by UnixLabels.openfile
421
422 *)
423 | O_KEEPEXEC (* Clear the close-on-exec flag. This is currently the
424 default.
425 *)
426
427
428 The flags to UnixLabels.openfile .
429
430
431 type file_perm = int
432
433
434 The type of file access rights, e.g. 0o640 is read and write for user,
435 read for group, none for others
436
437
438
439 val openfile : string -> mode:open_flag list -> perm:file_perm ->
440 file_descr
441
442 Open the named file with the given flags. Third argument is the permis‐
443 sions to give to the file if it is created. Return a file descriptor on
444 the named file.
445
446
447
448 val close : file_descr -> unit
449
450 Close a file descriptor.
451
452
453
454 val read : file_descr -> buf:bytes -> pos:int -> len:int -> int
455
456
457 read fd buff ofs len reads len bytes from descriptor fd , storing them
458 in byte sequence buff , starting at position ofs in buff . Return the
459 number of bytes actually read.
460
461
462
463 val write : file_descr -> buf:bytes -> pos:int -> len:int -> int
464
465
466 write fd buff ofs len writes len bytes to descriptor fd , taking them
467 from byte sequence buff , starting at position ofs in buff . Return the
468 number of bytes actually written. write repeats the writing operation
469 until all bytes have been written or an error occurs.
470
471
472
473 val single_write : file_descr -> buf:bytes -> pos:int -> len:int -> int
474
475 Same as write , but attempts to write only once. Thus, if an error
476 occurs, single_write guarantees that no data has been written.
477
478
479
480 val write_substring : file_descr -> buf:string -> pos:int -> len:int ->
481 int
482
483 Same as write , but take the data from a string instead of a byte
484 sequence.
485
486
487 Since 4.02.0
488
489
490
491 val single_write_substring : file_descr -> buf:string -> pos:int ->
492 len:int -> int
493
494 Same as single_write , but take the data from a string instead of a
495 byte sequence.
496
497
498 Since 4.02.0
499
500
501
502
503 Interfacing with the standard input/output library
504 val in_channel_of_descr : file_descr -> in_channel
505
506 Create an input channel reading from the given descriptor. The channel
507 is initially in binary mode; use set_binary_mode_in ic false if text
508 mode is desired.
509
510
511
512 val out_channel_of_descr : file_descr -> out_channel
513
514 Create an output channel writing on the given descriptor. The channel
515 is initially in binary mode; use set_binary_mode_out oc false if text
516 mode is desired.
517
518
519
520 val descr_of_in_channel : in_channel -> file_descr
521
522 Return the descriptor corresponding to an input channel.
523
524
525
526 val descr_of_out_channel : out_channel -> file_descr
527
528 Return the descriptor corresponding to an output channel.
529
530
531
532
533 Seeking and truncating
534 type seek_command = Unix.seek_command =
535 | SEEK_SET (* indicates positions relative to the beginning of the
536 file
537 *)
538 | SEEK_CUR (* indicates positions relative to the current position
539 *)
540 | SEEK_END (* indicates positions relative to the end of the file
541 *)
542
543
544 Positioning modes for UnixLabels.lseek .
545
546
547
548 val lseek : file_descr -> int -> mode:seek_command -> int
549
550 Set the current position for a file descriptor, and return the result‐
551 ing offset (from the beginning of the file).
552
553
554
555 val truncate : string -> len:int -> unit
556
557 Truncates the named file to the given size.
558
559
560
561 val ftruncate : file_descr -> len:int -> unit
562
563 Truncates the file corresponding to the given descriptor to the given
564 size.
565
566
567
568
569 File status
570 type file_kind = Unix.file_kind =
571 | S_REG (* Regular file
572 *)
573 | S_DIR (* Directory
574 *)
575 | S_CHR (* Character device
576 *)
577 | S_BLK (* Block device
578 *)
579 | S_LNK (* Symbolic link
580 *)
581 | S_FIFO (* Named pipe
582 *)
583 | S_SOCK (* Socket
584 *)
585
586
587
588
589 type stats = Unix.stats = {
590 st_dev : int ; (* Device number
591 *)
592 st_ino : int ; (* Inode number
593 *)
594 st_kind : file_kind ; (* Kind of the file
595 *)
596 st_perm : file_perm ; (* Access rights
597 *)
598 st_nlink : int ; (* Number of links
599 *)
600 st_uid : int ; (* User id of the owner
601 *)
602 st_gid : int ; (* Group ID of the file's group
603 *)
604 st_rdev : int ; (* Device ID (if special file)
605 *)
606 st_size : int ; (* Size in bytes
607 *)
608 st_atime : float ; (* Last access time
609 *)
610 st_mtime : float ; (* Last modification time
611 *)
612 st_ctime : float ; (* Last status change time
613 *)
614 }
615
616
617 The information returned by the UnixLabels.stat calls.
618
619
620
621 val stat : string -> stats
622
623 Return the information for the named file.
624
625
626
627 val lstat : string -> stats
628
629 Same as UnixLabels.stat , but in case the file is a symbolic link,
630 return the information for the link itself.
631
632
633
634 val fstat : file_descr -> stats
635
636 Return the information for the file associated with the given descrip‐
637 tor.
638
639
640
641 val isatty : file_descr -> bool
642
643 Return true if the given file descriptor refers to a terminal or con‐
644 sole window, false otherwise.
645
646
647
648
649 File operations on large files
650 module LargeFile : sig end
651
652
653 File operations on large files. This sub-module provides 64-bit vari‐
654 ants of the functions UnixLabels.lseek (for positioning a file descrip‐
655 tor), UnixLabels.truncate and UnixLabels.ftruncate (for changing the
656 size of a file), and UnixLabels.stat , UnixLabels.lstat and UnixLa‐
657 bels.fstat (for obtaining information on files). These alternate func‐
658 tions represent positions and sizes by 64-bit integers (type int64 )
659 instead of regular integers (type int ), thus allowing operating on
660 files whose sizes are greater than max_int .
661
662
663
664
665 Mapping files into memory
666 val map_file : file_descr -> ?pos:int64 -> kind:('a, 'b) Bigarray.kind
667 -> layout:'c Bigarray.layout -> shared:bool -> dims:int array -> ('a,
668 'b, 'c) Bigarray.Genarray.t
669
670 Memory mapping of a file as a Bigarray. map_file fd kind layout shared
671 dims returns a Bigarray of kind kind , layout layout , and dimensions
672 as specified in dims . The data contained in this Bigarray are the
673 contents of the file referred to by the file descriptor fd (as opened
674 previously with Unix.openfile , for example). The optional pos parame‐
675 ter is the byte offset in the file of the data being mapped; it
676 defaults to 0 (map from the beginning of the file).
677
678 If shared is true , all modifications performed on the array are
679 reflected in the file. This requires that fd be opened with write per‐
680 missions. If shared is false , modifications performed on the array
681 are done in memory only, using copy-on-write of the modified pages; the
682 underlying file is not affected.
683
684
685 Genarray.map_file is much more efficient than reading the whole file in
686 a Bigarray, modifying that Bigarray, and writing it afterwards.
687
688 To adjust automatically the dimensions of the Bigarray to the actual
689 size of the file, the major dimension (that is, the first dimension for
690 an array with C layout, and the last dimension for an array with For‐
691 tran layout) can be given as -1 . Genarray.map_file then determines
692 the major dimension from the size of the file. The file must contain
693 an integral number of sub-arrays as determined by the non-major dimen‐
694 sions, otherwise Failure is raised.
695
696 If all dimensions of the Bigarray are given, the file size is matched
697 against the size of the Bigarray. If the file is larger than the
698 Bigarray, only the initial portion of the file is mapped to the Bigar‐
699 ray. If the file is smaller than the big array, the file is automati‐
700 cally grown to the size of the Bigarray. This requires write permis‐
701 sions on fd .
702
703 Array accesses are bounds-checked, but the bounds are determined by the
704 initial call to map_file . Therefore, you should make sure no other
705 process modifies the mapped file while you're accessing it, or a SIGBUS
706 signal may be raised. This happens, for instance, if the file is
707 shrunk.
708
709
710 Invalid_argument or Failure may be raised in cases where argument vali‐
711 dation fails.
712
713
714 Since 4.06.0
715
716
717
718
719 Operations on file names
720 val unlink : string -> unit
721
722 Removes the named file
723
724
725
726 val rename : src:string -> dst:string -> unit
727
728
729 rename old new changes the name of a file from old to new .
730
731
732
733 val link : ?follow:bool -> src:string -> dst:string -> unit
734
735
736 link ?follow source dest creates a hard link named dest to the file
737 named source .
738
739
740 Raises ENOSYS On Unix if ~follow:_ is requested, but linkat is unavail‐
741 able.
742
743
744 Raises ENOSYS On Windows if ~follow:false is requested.
745
746
747
748
749 File permissions and ownership
750 type access_permission = Unix.access_permission =
751 | R_OK (* Read permission
752 *)
753 | W_OK (* Write permission
754 *)
755 | X_OK (* Execution permission
756 *)
757 | F_OK (* File exists
758 *)
759
760
761 Flags for the UnixLabels.access call.
762
763
764
765 val chmod : string -> perm:file_perm -> unit
766
767 Change the permissions of the named file.
768
769
770
771 val fchmod : file_descr -> perm:file_perm -> unit
772
773 Change the permissions of an opened file.
774
775
776
777 val chown : string -> uid:int -> gid:int -> unit
778
779 Change the owner uid and owner gid of the named file.
780
781
782
783 val fchown : file_descr -> uid:int -> gid:int -> unit
784
785 Change the owner uid and owner gid of an opened file.
786
787
788
789 val umask : int -> int
790
791 Set the process's file mode creation mask, and return the previous
792 mask.
793
794
795
796 val access : string -> perm:access_permission list -> unit
797
798 Check that the process has the given permissions over the named file.
799 Raise Unix_error otherwise.
800
801
802
803
804 Operations on file descriptors
805 val dup : ?cloexec:bool -> file_descr -> file_descr
806
807 Return a new file descriptor referencing the same file as the given
808 descriptor.
809
810
811
812 val dup2 : ?cloexec:bool -> src:file_descr -> dst:file_descr -> unit
813
814
815 dup2 fd1 fd2 duplicates fd1 to fd2 , closing fd2 if already opened.
816
817
818
819 val set_nonblock : file_descr -> unit
820
821 Set the ``non-blocking'' flag on the given descriptor. When the
822 non-blocking flag is set, reading on a descriptor on which there is
823 temporarily no data available raises the EAGAIN or EWOULDBLOCK error
824 instead of blocking; writing on a descriptor on which there is tempo‐
825 rarily no room for writing also raises EAGAIN or EWOULDBLOCK .
826
827
828
829 val clear_nonblock : file_descr -> unit
830
831 Clear the ``non-blocking'' flag on the given descriptor. See UnixLa‐
832 bels.set_nonblock .
833
834
835
836 val set_close_on_exec : file_descr -> unit
837
838 Set the ``close-on-exec'' flag on the given descriptor. A descriptor
839 with the close-on-exec flag is automatically closed when the current
840 process starts another program with one of the exec functions.
841
842
843
844 val clear_close_on_exec : file_descr -> unit
845
846 Clear the ``close-on-exec'' flag on the given descriptor. See UnixLa‐
847 bels.set_close_on_exec .
848
849
850
851
852 Directories
853 val mkdir : string -> perm:file_perm -> unit
854
855 Create a directory with the given permissions.
856
857
858
859 val rmdir : string -> unit
860
861 Remove an empty directory.
862
863
864
865 val chdir : string -> unit
866
867 Change the process working directory.
868
869
870
871 val getcwd : unit -> string
872
873 Return the name of the current working directory.
874
875
876
877 val chroot : string -> unit
878
879 Change the process root directory.
880
881
882 type dir_handle = Unix.dir_handle
883
884
885 The type of descriptors over opened directories.
886
887
888
889 val opendir : string -> dir_handle
890
891 Open a descriptor on a directory
892
893
894
895 val readdir : dir_handle -> string
896
897 Return the next entry in a directory.
898
899
900 Raises End_of_file when the end of the directory has been reached.
901
902
903
904 val rewinddir : dir_handle -> unit
905
906 Reposition the descriptor to the beginning of the directory
907
908
909
910 val closedir : dir_handle -> unit
911
912 Close a directory descriptor.
913
914
915
916
917 Pipes and redirections
918 val pipe : ?cloexec:bool -> unit -> file_descr * file_descr
919
920 Create a pipe. The first component of the result is opened for reading,
921 that's the exit to the pipe. The second component is opened for writ‐
922 ing, that's the entrance to the pipe.
923
924
925
926 val mkfifo : string -> perm:file_perm -> unit
927
928 Create a named pipe with the given permissions.
929
930
931
932
933 High-level process and redirection management
934 val create_process : prog:string -> args:string array ->
935 stdin:file_descr -> stdout:file_descr -> stderr:file_descr -> int
936
937
938 create_process prog args new_stdin new_stdout new_stderr forks a new
939 process that executes the program in file prog , with arguments args .
940 The pid of the new process is returned immediately; the new process
941 executes concurrently with the current process. The standard input and
942 outputs of the new process are connected to the descriptors new_stdin ,
943 new_stdout and new_stderr . Passing e.g. stdout for new_stdout pre‐
944 vents the redirection and causes the new process to have the same stan‐
945 dard output as the current process. The executable file prog is
946 searched in the path. The new process has the same environment as the
947 current process.
948
949
950
951 val create_process_env : prog:string -> args:string array -> env:string
952 array -> stdin:file_descr -> stdout:file_descr -> stderr:file_descr ->
953 int
954
955
956 create_process_env prog args env new_stdin new_stdout new_stderr works
957 as UnixLabels.create_process , except that the extra argument env spec‐
958 ifies the environment passed to the program.
959
960
961
962 val open_process_in : string -> in_channel
963
964 High-level pipe and process management. This function runs the given
965 command in parallel with the program. The standard output of the com‐
966 mand is redirected to a pipe, which can be read via the returned input
967 channel. The command is interpreted by the shell /bin/sh (cf. system
968 ).
969
970
971
972 val open_process_out : string -> out_channel
973
974 Same as UnixLabels.open_process_in , but redirect the standard input of
975 the command to a pipe. Data written to the returned output channel is
976 sent to the standard input of the command. Warning: writes on output
977 channels are buffered, hence be careful to call flush at the right
978 times to ensure correct synchronization.
979
980
981
982 val open_process : string -> in_channel * out_channel
983
984 Same as UnixLabels.open_process_out , but redirects both the standard
985 input and standard output of the command to pipes connected to the two
986 returned channels. The input channel is connected to the output of the
987 command, and the output channel to the input of the command.
988
989
990
991 val open_process_full : string -> env:string array -> in_channel *
992 out_channel * in_channel
993
994 Similar to UnixLabels.open_process , but the second argument specifies
995 the environment passed to the command. The result is a triple of chan‐
996 nels connected respectively to the standard output, standard input, and
997 standard error of the command.
998
999
1000
1001 val open_process_args_in : string -> string array -> in_channel
1002
1003 High-level pipe and process management. The first argument specifies
1004 the command to run, and the second argument specifies the argument
1005 array passed to the command. This function runs the command in paral‐
1006 lel with the program. The standard output of the command is redirected
1007 to a pipe, which can be read via the returned input channel.
1008
1009
1010 Since 4.08.0
1011
1012
1013
1014 val open_process_args_out : string -> string array -> out_channel
1015
1016 Same as Unix.open_process_args_in , but redirect the standard input of
1017 the command to a pipe. Data written to the returned output channel is
1018 sent to the standard input of the command. Warning: writes on output
1019 channels are buffered, hence be careful to call flush at the right
1020 times to ensure correct synchronization.
1021
1022
1023 Since 4.08.0
1024
1025
1026
1027 val open_process_args : string -> string array -> in_channel *
1028 out_channel
1029
1030 Same as Unix.open_process_args_out , but redirects both the standard
1031 input and standard output of the command to pipes connected to the two
1032 returned channels. The input channel is connected to the output of the
1033 command, and the output channel to the input of the command.
1034
1035
1036 Since 4.08.0
1037
1038
1039
1040 val open_process_args_full : string -> string array -> string array ->
1041 in_channel * out_channel * in_channel
1042
1043 Similar to Unix.open_process_args , but the third argument specifies
1044 the environment passed to the command. The result is a triple of chan‐
1045 nels connected respectively to the standard output, standard input, and
1046 standard error of the command.
1047
1048
1049 Since 4.08.0
1050
1051
1052
1053 val close_process_in : in_channel -> process_status
1054
1055 Close channels opened by UnixLabels.open_process_in , wait for the
1056 associated command to terminate, and return its termination status.
1057
1058
1059
1060 val close_process_out : out_channel -> process_status
1061
1062 Close channels opened by UnixLabels.open_process_out , wait for the
1063 associated command to terminate, and return its termination status.
1064
1065
1066
1067 val close_process : in_channel * out_channel -> process_status
1068
1069 Close channels opened by UnixLabels.open_process , wait for the associ‐
1070 ated command to terminate, and return its termination status.
1071
1072
1073
1074 val close_process_full : in_channel * out_channel * in_channel ->
1075 process_status
1076
1077 Close channels opened by UnixLabels.open_process_full , wait for the
1078 associated command to terminate, and return its termination status.
1079
1080
1081
1082
1083 Symbolic links
1084 val symlink : ?to_dir:bool -> src:string -> dst:string -> unit
1085
1086
1087 symlink source dest creates the file dest as a symbolic link to the
1088 file source . See Unix.symlink for details of ~to_dir
1089
1090
1091
1092
1093 val has_symlink : unit -> bool
1094
1095 Returns true if the user is able to create symbolic links. On Windows,
1096 this indicates that the user not only has the SeCreateSymbolicLinkPriv‐
1097 ilege but is also running elevated, if necessary. On other platforms,
1098 this is simply indicates that the symlink system call is available.
1099
1100
1101 Since 4.03.0
1102
1103
1104
1105 val readlink : string -> string
1106
1107 Read the contents of a link.
1108
1109
1110
1111
1112 Polling
1113 val select : read:file_descr list -> write:file_descr list ->
1114 except:file_descr list -> timeout:float -> file_descr list * file_descr
1115 list * file_descr list
1116
1117 Wait until some input/output operations become possible on some chan‐
1118 nels. The three list arguments are, respectively, a set of descriptors
1119 to check for reading (first argument), for writing (second argument),
1120 or for exceptional conditions (third argument). The fourth argument is
1121 the maximal timeout, in seconds; a negative fourth argument means no
1122 timeout (unbounded wait). The result is composed of three sets of
1123 descriptors: those ready for reading (first component), ready for writ‐
1124 ing (second component), and over which an exceptional condition is
1125 pending (third component).
1126
1127
1128
1129
1130 Locking
1131 type lock_command = Unix.lock_command =
1132 | F_ULOCK (* Unlock a region
1133 *)
1134 | F_LOCK (* Lock a region for writing, and block if already locked
1135 *)
1136 | F_TLOCK (* Lock a region for writing, or fail if already locked
1137 *)
1138 | F_TEST (* Test a region for other process locks
1139 *)
1140 | F_RLOCK (* Lock a region for reading, and block if already locked
1141 *)
1142 | F_TRLOCK (* Lock a region for reading, or fail if already locked
1143 *)
1144
1145
1146 Commands for UnixLabels.lockf .
1147
1148
1149
1150 val lockf : file_descr -> mode:lock_command -> len:int -> unit
1151
1152
1153 lockf fd cmd size puts a lock on a region of the file opened as fd .
1154 The region starts at the current read/write position for fd (as set by
1155 UnixLabels.lseek ), and extends size bytes forward if size is positive,
1156 size bytes backwards if size is negative, or to the end of the file if
1157 size is zero. A write lock prevents any other process from acquiring a
1158 read or write lock on the region. A read lock prevents any other
1159 process from acquiring a write lock on the region, but lets other pro‐
1160 cesses acquire read locks on it.
1161
1162 The F_LOCK and F_TLOCK commands attempts to put a write lock on the
1163 specified region. The F_RLOCK and F_TRLOCK commands attempts to put a
1164 read lock on the specified region. If one or several locks put by
1165 another process prevent the current process from acquiring the lock,
1166 F_LOCK and F_RLOCK block until these locks are removed, while F_TLOCK
1167 and F_TRLOCK fail immediately with an exception. The F_ULOCK removes
1168 whatever locks the current process has on the specified region.
1169 Finally, the F_TEST command tests whether a write lock can be acquired
1170 on the specified region, without actually putting a lock. It returns
1171 immediately if successful, or fails otherwise.
1172
1173
1174
1175
1176 Signals
1177 Note: installation of signal handlers is performed via the functions
1178 Sys.signal and Sys.set_signal .
1179
1180 val kill : pid:int -> signal:int -> unit
1181
1182
1183 kill pid sig sends signal number sig to the process with id pid .
1184
1185
1186 type sigprocmask_command = Unix.sigprocmask_command =
1187 | SIG_SETMASK
1188 | SIG_BLOCK
1189 | SIG_UNBLOCK
1190
1191
1192
1193
1194
1195 val sigprocmask : mode:sigprocmask_command -> int list -> int list
1196
1197
1198 sigprocmask cmd sigs changes the set of blocked signals. If cmd is
1199 SIG_SETMASK , blocked signals are set to those in the list sigs . If
1200 cmd is SIG_BLOCK , the signals in sigs are added to the set of blocked
1201 signals. If cmd is SIG_UNBLOCK , the signals in sigs are removed from
1202 the set of blocked signals. sigprocmask returns the set of previously
1203 blocked signals.
1204
1205
1206
1207 val sigpending : unit -> int list
1208
1209 Return the set of blocked signals that are currently pending.
1210
1211
1212
1213 val sigsuspend : int list -> unit
1214
1215
1216 sigsuspend sigs atomically sets the blocked signals to sigs and waits
1217 for a non-ignored, non-blocked signal to be delivered. On return, the
1218 blocked signals are reset to their initial value.
1219
1220
1221
1222 val pause : unit -> unit
1223
1224 Wait until a non-ignored, non-blocked signal is delivered.
1225
1226
1227
1228
1229 Time functions
1230 type process_times = Unix.process_times = {
1231 tms_utime : float ; (* User time for the process
1232 *)
1233 tms_stime : float ; (* System time for the process
1234 *)
1235 tms_cutime : float ; (* User time for the children processes
1236 *)
1237 tms_cstime : float ; (* System time for the children processes
1238 *)
1239 }
1240
1241
1242 The execution times (CPU times) of a process.
1243
1244
1245 type tm = Unix.tm = {
1246 tm_sec : int ; (* Seconds 0..60
1247 *)
1248 tm_min : int ; (* Minutes 0..59
1249 *)
1250 tm_hour : int ; (* Hours 0..23
1251 *)
1252 tm_mday : int ; (* Day of month 1..31
1253 *)
1254 tm_mon : int ; (* Month of year 0..11
1255 *)
1256 tm_year : int ; (* Year - 1900
1257 *)
1258 tm_wday : int ; (* Day of week (Sunday is 0)
1259 *)
1260 tm_yday : int ; (* Day of year 0..365
1261 *)
1262 tm_isdst : bool ; (* Daylight time savings in effect
1263 *)
1264 }
1265
1266
1267 The type representing wallclock time and calendar date.
1268
1269
1270
1271 val time : unit -> float
1272
1273 Return the current time since 00:00:00 GMT, Jan. 1, 1970, in seconds.
1274
1275
1276
1277 val gettimeofday : unit -> float
1278
1279 Same as UnixLabels.time , but with resolution better than 1 second.
1280
1281
1282
1283 val gmtime : float -> tm
1284
1285 Convert a time in seconds, as returned by UnixLabels.time , into a date
1286 and a time. Assumes UTC (Coordinated Universal Time), also known as
1287 GMT.
1288
1289
1290
1291 val localtime : float -> tm
1292
1293 Convert a time in seconds, as returned by UnixLabels.time , into a date
1294 and a time. Assumes the local time zone.
1295
1296
1297
1298 val mktime : tm -> float * tm
1299
1300 Convert a date and time, specified by the tm argument, into a time in
1301 seconds, as returned by UnixLabels.time . The tm_isdst , tm_wday and
1302 tm_yday fields of tm are ignored. Also return a normalized copy of the
1303 given tm record, with the tm_wday , tm_yday , and tm_isdst fields
1304 recomputed from the other fields, and the other fields normalized (so
1305 that, e.g., 40 October is changed into 9 November). The tm argument is
1306 interpreted in the local time zone.
1307
1308
1309
1310 val alarm : int -> int
1311
1312 Schedule a SIGALRM signal after the given number of seconds.
1313
1314
1315
1316 val sleep : int -> unit
1317
1318 Stop execution for the given number of seconds.
1319
1320
1321
1322 val times : unit -> process_times
1323
1324 Return the execution times of the process.
1325
1326
1327
1328 val utimes : string -> access:float -> modif:float -> unit
1329
1330 Set the last access time (second arg) and last modification time (third
1331 arg) for a file. Times are expressed in seconds from 00:00:00 GMT, Jan.
1332 1, 1970. A time of 0.0 is interpreted as the current time.
1333
1334
1335 type interval_timer = Unix.interval_timer =
1336 | ITIMER_REAL (* decrements in real time, and sends the signal
1337 SIGALRM when expired.
1338 *)
1339 | ITIMER_VIRTUAL (* decrements in process virtual time, and sends
1340 SIGVTALRM when expired.
1341 *)
1342 | ITIMER_PROF (* (for profiling) decrements both when the process is
1343 running and when the system is running on behalf of the process; it
1344 sends SIGPROF when expired.
1345 *)
1346
1347
1348 The three kinds of interval timers.
1349
1350
1351 type interval_timer_status = Unix.interval_timer_status = {
1352 it_interval : float ; (* Period
1353 *)
1354 it_value : float ; (* Current value of the timer
1355 *)
1356 }
1357
1358
1359 The type describing the status of an interval timer
1360
1361
1362
1363 val getitimer : interval_timer -> interval_timer_status
1364
1365 Return the current status of the given interval timer.
1366
1367
1368
1369 val setitimer : interval_timer -> interval_timer_status -> inter‐
1370 val_timer_status
1371
1372
1373 setitimer t s sets the interval timer t and returns its previous sta‐
1374 tus. The s argument is interpreted as follows: s.it_value , if nonzero,
1375 is the time to the next timer expiration; s.it_interval , if nonzero,
1376 specifies a value to be used in reloading it_value when the timer
1377 expires. Setting s.it_value to zero disable the timer. Setting
1378 s.it_interval to zero causes the timer to be disabled after its next
1379 expiration.
1380
1381
1382
1383
1384 User id, group id
1385 val getuid : unit -> int
1386
1387 Return the user id of the user executing the process.
1388
1389
1390
1391 val geteuid : unit -> int
1392
1393 Return the effective user id under which the process runs.
1394
1395
1396
1397 val setuid : int -> unit
1398
1399 Set the real user id and effective user id for the process.
1400
1401
1402
1403 val getgid : unit -> int
1404
1405 Return the group id of the user executing the process.
1406
1407
1408
1409 val getegid : unit -> int
1410
1411 Return the effective group id under which the process runs.
1412
1413
1414
1415 val setgid : int -> unit
1416
1417 Set the real group id and effective group id for the process.
1418
1419
1420
1421 val getgroups : unit -> int array
1422
1423 Return the list of groups to which the user executing the process
1424 belongs.
1425
1426
1427
1428 val setgroups : int array -> unit
1429
1430
1431 setgroups groups sets the supplementary group IDs for the calling
1432 process. Appropriate privileges are required.
1433
1434
1435
1436 val initgroups : string -> int -> unit
1437
1438
1439 initgroups user group initializes the group access list by reading the
1440 group database /etc/group and using all groups of which user is a mem‐
1441 ber. The additional group group is also added to the list.
1442
1443
1444 type passwd_entry = Unix.passwd_entry = {
1445 pw_name : string ;
1446 pw_passwd : string ;
1447 pw_uid : int ;
1448 pw_gid : int ;
1449 pw_gecos : string ;
1450 pw_dir : string ;
1451 pw_shell : string ;
1452 }
1453
1454
1455 Structure of entries in the passwd database.
1456
1457
1458 type group_entry = Unix.group_entry = {
1459 gr_name : string ;
1460 gr_passwd : string ;
1461 gr_gid : int ;
1462 gr_mem : string array ;
1463 }
1464
1465
1466 Structure of entries in the groups database.
1467
1468
1469
1470 val getlogin : unit -> string
1471
1472 Return the login name of the user executing the process.
1473
1474
1475
1476 val getpwnam : string -> passwd_entry
1477
1478 Find an entry in passwd with the given name, or raise Not_found if the
1479 matching entry is not found.
1480
1481
1482
1483 val getgrnam : string -> group_entry
1484
1485 Find an entry in group with the given name, or raise Not_found if the
1486 matching entry is not found.
1487
1488
1489
1490 val getpwuid : int -> passwd_entry
1491
1492 Find an entry in passwd with the given user id, or raise Not_found if
1493 the matching entry is not found.
1494
1495
1496
1497 val getgrgid : int -> group_entry
1498
1499 Find an entry in group with the given group id, or raise Not_found if
1500 the matching entry is not found.
1501
1502
1503
1504
1505 Internet addresses
1506 type inet_addr = Unix.inet_addr
1507
1508
1509 The abstract type of Internet addresses.
1510
1511
1512
1513 val inet_addr_of_string : string -> inet_addr
1514
1515 Conversion from the printable representation of an Internet address to
1516 its internal representation. The argument string consists of 4 numbers
1517 separated by periods ( XXX.YYY.ZZZ.TTT ) for IPv4 addresses, and up to
1518 8 numbers separated by colons for IPv6 addresses. Raise Failure when
1519 given a string that does not match these formats.
1520
1521
1522
1523 val string_of_inet_addr : inet_addr -> string
1524
1525 Return the printable representation of the given Internet address. See
1526 Unix.inet_addr_of_string for a description of the printable representa‐
1527 tion.
1528
1529
1530
1531 val inet_addr_any : inet_addr
1532
1533 A special IPv4 address, for use only with bind , representing all the
1534 Internet addresses that the host machine possesses.
1535
1536
1537
1538 val inet_addr_loopback : inet_addr
1539
1540 A special IPv4 address representing the host machine ( 127.0.0.1 ).
1541
1542
1543
1544 val inet6_addr_any : inet_addr
1545
1546 A special IPv6 address, for use only with bind , representing all the
1547 Internet addresses that the host machine possesses.
1548
1549
1550
1551 val inet6_addr_loopback : inet_addr
1552
1553 A special IPv6 address representing the host machine ( ::1 ).
1554
1555
1556
1557
1558 Sockets
1559 type socket_domain = Unix.socket_domain =
1560 | PF_UNIX (* Unix domain
1561 *)
1562 | PF_INET (* Internet domain (IPv4)
1563 *)
1564 | PF_INET6 (* Internet domain (IPv6)
1565 *)
1566
1567
1568 The type of socket domains. Not all platforms support IPv6 sockets
1569 (type PF_INET6 ).
1570
1571
1572 type socket_type = Unix.socket_type =
1573 | SOCK_STREAM (* Stream socket
1574 *)
1575 | SOCK_DGRAM (* Datagram socket
1576 *)
1577 | SOCK_RAW (* Raw socket
1578 *)
1579 | SOCK_SEQPACKET (* Sequenced packets socket
1580 *)
1581
1582
1583 The type of socket kinds, specifying the semantics of communications.
1584
1585
1586 type sockaddr = Unix.sockaddr =
1587 | ADDR_UNIX of string
1588 | ADDR_INET of inet_addr * int
1589 (* The type of socket addresses. ADDR_UNIX name is a socket address
1590 in the Unix domain; name is a file name in the file system.
1591 ADDR_INET(addr,port) is a socket address in the Internet domain; addr
1592 is the Internet address of the machine, and port is the port number.
1593 *)
1594
1595
1596
1597
1598
1599 val socket : ?cloexec:bool -> domain:socket_domain -> kind:socket_type
1600 -> protocol:int -> file_descr
1601
1602 Create a new socket in the given domain, and with the given kind. The
1603 third argument is the protocol type; 0 selects the default protocol for
1604 that kind of sockets.
1605
1606
1607
1608 val domain_of_sockaddr : sockaddr -> socket_domain
1609
1610 Return the socket domain adequate for the given socket address.
1611
1612
1613
1614 val socketpair : ?cloexec:bool -> domain:socket_domain ->
1615 kind:socket_type -> protocol:int -> file_descr * file_descr
1616
1617 Create a pair of unnamed sockets, connected together.
1618
1619
1620
1621 val accept : ?cloexec:bool -> file_descr -> file_descr * sockaddr
1622
1623 Accept connections on the given socket. The returned descriptor is a
1624 socket connected to the client; the returned address is the address of
1625 the connecting client.
1626
1627
1628
1629 val bind : file_descr -> addr:sockaddr -> unit
1630
1631 Bind a socket to an address.
1632
1633
1634
1635 val connect : file_descr -> addr:sockaddr -> unit
1636
1637 Connect a socket to an address.
1638
1639
1640
1641 val listen : file_descr -> max:int -> unit
1642
1643 Set up a socket for receiving connection requests. The integer argument
1644 is the maximal number of pending requests.
1645
1646
1647 type shutdown_command = Unix.shutdown_command =
1648 | SHUTDOWN_RECEIVE (* Close for receiving
1649 *)
1650 | SHUTDOWN_SEND (* Close for sending
1651 *)
1652 | SHUTDOWN_ALL (* Close both
1653 *)
1654
1655
1656 The type of commands for shutdown .
1657
1658
1659
1660 val shutdown : file_descr -> mode:shutdown_command -> unit
1661
1662 Shutdown a socket connection. SHUTDOWN_SEND as second argument causes
1663 reads on the other end of the connection to return an end-of-file con‐
1664 dition. SHUTDOWN_RECEIVE causes writes on the other end of the connec‐
1665 tion to return a closed pipe condition ( SIGPIPE signal).
1666
1667
1668
1669 val getsockname : file_descr -> sockaddr
1670
1671 Return the address of the given socket.
1672
1673
1674
1675 val getpeername : file_descr -> sockaddr
1676
1677 Return the address of the host connected to the given socket.
1678
1679
1680 type msg_flag = Unix.msg_flag =
1681 | MSG_OOB
1682 | MSG_DONTROUTE
1683 | MSG_PEEK (* The flags for UnixLabels.recv , UnixLabels.recvfrom ,
1684 UnixLabels.send and UnixLabels.sendto .
1685 *)
1686
1687
1688
1689
1690
1691 val recv : file_descr -> buf:bytes -> pos:int -> len:int ->
1692 mode:msg_flag list -> int
1693
1694 Receive data from a connected socket.
1695
1696
1697
1698 val recvfrom : file_descr -> buf:bytes -> pos:int -> len:int ->
1699 mode:msg_flag list -> int * sockaddr
1700
1701 Receive data from an unconnected socket.
1702
1703
1704
1705 val send : file_descr -> buf:bytes -> pos:int -> len:int ->
1706 mode:msg_flag list -> int
1707
1708 Send data over a connected socket.
1709
1710
1711
1712 val send_substring : file_descr -> buf:string -> pos:int -> len:int ->
1713 mode:msg_flag list -> int
1714
1715 Same as send , but take the data from a string instead of a byte
1716 sequence.
1717
1718
1719 Since 4.02.0
1720
1721
1722
1723 val sendto : file_descr -> buf:bytes -> pos:int -> len:int ->
1724 mode:msg_flag list -> addr:sockaddr -> int
1725
1726 Send data over an unconnected socket.
1727
1728
1729
1730 val sendto_substring : file_descr -> buf:string -> pos:int -> len:int
1731 -> mode:msg_flag list -> sockaddr -> int
1732
1733 Same as sendto , but take the data from a string instead of a byte
1734 sequence.
1735
1736
1737 Since 4.02.0
1738
1739
1740
1741
1742 Socket options
1743 type socket_bool_option =
1744 | SO_DEBUG (* Record debugging information
1745 *)
1746 | SO_BROADCAST (* Permit sending of broadcast messages
1747 *)
1748 | SO_REUSEADDR (* Allow reuse of local addresses for bind
1749 *)
1750 | SO_KEEPALIVE (* Keep connection active
1751 *)
1752 | SO_DONTROUTE (* Bypass the standard routing algorithms
1753 *)
1754 | SO_OOBINLINE (* Leave out-of-band data in line
1755 *)
1756 | SO_ACCEPTCONN (* Report whether socket listening is enabled
1757 *)
1758 | TCP_NODELAY (* Control the Nagle algorithm for TCP sockets
1759 *)
1760 | IPV6_ONLY (* Forbid binding an IPv6 socket to an IPv4 address
1761 *)
1762
1763
1764 The socket options that can be consulted with UnixLabels.getsockopt and
1765 modified with UnixLabels.setsockopt . These options have a boolean (
1766 true / false ) value.
1767
1768
1769 type socket_int_option =
1770 | SO_SNDBUF (* Size of send buffer
1771 *)
1772 | SO_RCVBUF (* Size of received buffer
1773 *)
1774 | SO_ERROR (* Deprecated. Use Unix.getsockopt_error instead.
1775 *)
1776 | SO_TYPE (* Report the socket type
1777 *)
1778 | SO_RCVLOWAT (* Minimum number of bytes to process for input opera‐
1779 tions
1780 *)
1781 | SO_SNDLOWAT (* Minimum number of bytes to process for output opera‐
1782 tions
1783 *)
1784
1785
1786 The socket options that can be consulted with UnixLabels.getsockopt_int
1787 and modified with UnixLabels.setsockopt_int . These options have an
1788 integer value.
1789
1790
1791 type socket_optint_option =
1792 | SO_LINGER (* Whether to linger on closed connections that have data
1793 present, and for how long (in seconds)
1794 *)
1795
1796
1797 The socket options that can be consulted with Unix.getsockopt_optint
1798 and modified with Unix.setsockopt_optint . These options have a value
1799 of type int option , with None meaning ``disabled''.
1800
1801
1802 type socket_float_option =
1803 | SO_RCVTIMEO (* Timeout for input operations
1804 *)
1805 | SO_SNDTIMEO (* Timeout for output operations
1806 *)
1807
1808
1809 The socket options that can be consulted with UnixLabels.getsock‐
1810 opt_float and modified with UnixLabels.setsockopt_float . These
1811 options have a floating-point value representing a time in seconds.
1812 The value 0 means infinite timeout.
1813
1814
1815
1816 val getsockopt : file_descr -> socket_bool_option -> bool
1817
1818 Return the current status of a boolean-valued option in the given
1819 socket.
1820
1821
1822
1823 val setsockopt : file_descr -> socket_bool_option -> bool -> unit
1824
1825 Set or clear a boolean-valued option in the given socket.
1826
1827
1828
1829 val getsockopt_int : file_descr -> socket_int_option -> int
1830
1831 Same as Unix.getsockopt for an integer-valued socket option.
1832
1833
1834
1835 val setsockopt_int : file_descr -> socket_int_option -> int -> unit
1836
1837 Same as Unix.setsockopt for an integer-valued socket option.
1838
1839
1840
1841 val getsockopt_optint : file_descr -> socket_optint_option -> int
1842 option
1843
1844 Same as Unix.getsockopt for a socket option whose value is an int
1845 option .
1846
1847
1848
1849 val setsockopt_optint : file_descr -> socket_optint_option -> int
1850 option -> unit
1851
1852 Same as Unix.setsockopt for a socket option whose value is an int
1853 option .
1854
1855
1856
1857 val getsockopt_float : file_descr -> socket_float_option -> float
1858
1859 Same as Unix.getsockopt for a socket option whose value is a float‐
1860 ing-point number.
1861
1862
1863
1864 val setsockopt_float : file_descr -> socket_float_option -> float ->
1865 unit
1866
1867 Same as Unix.setsockopt for a socket option whose value is a float‐
1868 ing-point number.
1869
1870
1871
1872 val getsockopt_error : file_descr -> error option
1873
1874 Return the error condition associated with the given socket, and clear
1875 it.
1876
1877
1878
1879
1880 High-level network connection functions
1881 val open_connection : sockaddr -> in_channel * out_channel
1882
1883 Connect to a server at the given address. Return a pair of buffered
1884 channels connected to the server. Remember to call flush on the output
1885 channel at the right times to ensure correct synchronization.
1886
1887
1888
1889 val shutdown_connection : in_channel -> unit
1890
1891 ``Shut down'' a connection established with UnixLabels.open_connection
1892 ; that is, transmit an end-of-file condition to the server reading on
1893 the other side of the connection.
1894
1895
1896
1897 val establish_server : (in_channel -> out_channel -> unit) ->
1898 addr:sockaddr -> unit
1899
1900 Establish a server on the given address. The function given as first
1901 argument is called for each connection with two buffered channels con‐
1902 nected to the client. A new process is created for each connection. The
1903 function UnixLabels.establish_server never returns normally.
1904
1905
1906
1907
1908 Host and protocol databases
1909 type host_entry = Unix.host_entry = {
1910 h_name : string ;
1911 h_aliases : string array ;
1912 h_addrtype : socket_domain ;
1913 h_addr_list : inet_addr array ;
1914 }
1915
1916
1917 Structure of entries in the hosts database.
1918
1919
1920 type protocol_entry = Unix.protocol_entry = {
1921 p_name : string ;
1922 p_aliases : string array ;
1923 p_proto : int ;
1924 }
1925
1926
1927 Structure of entries in the protocols database.
1928
1929
1930 type service_entry = Unix.service_entry = {
1931 s_name : string ;
1932 s_aliases : string array ;
1933 s_port : int ;
1934 s_proto : string ;
1935 }
1936
1937
1938 Structure of entries in the services database.
1939
1940
1941
1942 val gethostname : unit -> string
1943
1944 Return the name of the local host.
1945
1946
1947
1948 val gethostbyname : string -> host_entry
1949
1950 Find an entry in hosts with the given name, or raise Not_found .
1951
1952
1953
1954 val gethostbyaddr : inet_addr -> host_entry
1955
1956 Find an entry in hosts with the given address, or raise Not_found .
1957
1958
1959
1960 val getprotobyname : string -> protocol_entry
1961
1962 Find an entry in protocols with the given name, or raise Not_found .
1963
1964
1965
1966 val getprotobynumber : int -> protocol_entry
1967
1968 Find an entry in protocols with the given protocol number, or raise
1969 Not_found .
1970
1971
1972
1973 val getservbyname : string -> protocol:string -> service_entry
1974
1975 Find an entry in services with the given name, or raise Not_found .
1976
1977
1978
1979 val getservbyport : int -> protocol:string -> service_entry
1980
1981 Find an entry in services with the given service number, or raise
1982 Not_found .
1983
1984
1985 type addr_info = {
1986 ai_family : socket_domain ; (* Socket domain
1987 *)
1988 ai_socktype : socket_type ; (* Socket type
1989 *)
1990 ai_protocol : int ; (* Socket protocol number
1991 *)
1992 ai_addr : sockaddr ; (* Address
1993 *)
1994 ai_canonname : string ; (* Canonical host name
1995 *)
1996 }
1997
1998
1999 Address information returned by Unix.getaddrinfo .
2000
2001
2002 type getaddrinfo_option =
2003 | AI_FAMILY of socket_domain
2004 (* Impose the given socket domain
2005 *)
2006 | AI_SOCKTYPE of socket_type
2007 (* Impose the given socket type
2008 *)
2009 | AI_PROTOCOL of int
2010 (* Impose the given protocol
2011 *)
2012 | AI_NUMERICHOST (* Do not call name resolver, expect numeric IP
2013 address
2014 *)
2015 | AI_CANONNAME (* Fill the ai_canonname field of the result
2016 *)
2017 | AI_PASSIVE (* Set address to ``any'' address for use with Unix.bind
2018
2019 *)
2020
2021
2022 Options to Unix.getaddrinfo .
2023
2024
2025
2026 val getaddrinfo : string -> string -> getaddrinfo_option list ->
2027 addr_info list
2028
2029
2030 getaddrinfo host service opts returns a list of Unix.addr_info records
2031 describing socket parameters and addresses suitable for communicating
2032 with the given host and service. The empty list is returned if the
2033 host or service names are unknown, or the constraints expressed in opts
2034 cannot be satisfied.
2035
2036
2037 host is either a host name or the string representation of an IP
2038 address. host can be given as the empty string; in this case, the
2039 ``any'' address or the ``loopback'' address are used, depending whether
2040 opts contains AI_PASSIVE . service is either a service name or the
2041 string representation of a port number. service can be given as the
2042 empty string; in this case, the port field of the returned addresses is
2043 set to 0. opts is a possibly empty list of options that allows the
2044 caller to force a particular socket domain (e.g. IPv6 only or IPv4
2045 only) or a particular socket type (e.g. TCP only or UDP only).
2046
2047
2048 type name_info = {
2049 ni_hostname : string ; (* Name or IP address of host
2050 *)
2051 ni_service : string ; (* Name of service or port number
2052 *)
2053 }
2054
2055
2056 Host and service information returned by Unix.getnameinfo .
2057
2058
2059 type getnameinfo_option =
2060 | NI_NOFQDN (* Do not qualify local host names
2061 *)
2062 | NI_NUMERICHOST (* Always return host as IP address
2063 *)
2064 | NI_NAMEREQD (* Fail if host name cannot be determined
2065 *)
2066 | NI_NUMERICSERV (* Always return service as port number
2067 *)
2068 | NI_DGRAM (* Consider the service as UDP-based instead of the
2069 default TCP
2070 *)
2071
2072
2073 Options to Unix.getnameinfo .
2074
2075
2076
2077 val getnameinfo : sockaddr -> getnameinfo_option list -> name_info
2078
2079
2080 getnameinfo addr opts returns the host name and service name corre‐
2081 sponding to the socket address addr . opts is a possibly empty list of
2082 options that governs how these names are obtained. Raise Not_found if
2083 an error occurs.
2084
2085
2086
2087
2088 Terminal interface
2089 The following functions implement the POSIX standard terminal inter‐
2090 face. They provide control over asynchronous communication ports and
2091 pseudo-terminals. Refer to the termios man page for a complete descrip‐
2092 tion.
2093
2094 type terminal_io = Unix.terminal_io = {
2095
2096 mutable c_ignbrk : bool ; (* Ignore the break condition.
2097 *)
2098
2099 mutable c_brkint : bool ; (* Signal interrupt on break condition.
2100 *)
2101
2102 mutable c_ignpar : bool ; (* Ignore characters with parity errors.
2103 *)
2104
2105 mutable c_parmrk : bool ; (* Mark parity errors.
2106 *)
2107
2108 mutable c_inpck : bool ; (* Enable parity check on input.
2109 *)
2110
2111 mutable c_istrip : bool ; (* Strip 8th bit on input characters.
2112 *)
2113
2114 mutable c_inlcr : bool ; (* Map NL to CR on input.
2115 *)
2116
2117 mutable c_igncr : bool ; (* Ignore CR on input.
2118 *)
2119
2120 mutable c_icrnl : bool ; (* Map CR to NL on input.
2121 *)
2122
2123 mutable c_ixon : bool ; (* Recognize XON/XOFF characters on input.
2124 *)
2125
2126 mutable c_ixoff : bool ; (* Emit XON/XOFF chars to control input flow.
2127 *)
2128
2129 mutable c_opost : bool ; (* Enable output processing.
2130 *)
2131
2132 mutable c_obaud : int ; (* Output baud rate (0 means close connec‐
2133 tion).
2134 *)
2135
2136 mutable c_ibaud : int ; (* Input baud rate.
2137 *)
2138
2139 mutable c_csize : int ; (* Number of bits per character (5-8).
2140 *)
2141
2142 mutable c_cstopb : int ; (* Number of stop bits (1-2).
2143 *)
2144
2145 mutable c_cread : bool ; (* Reception is enabled.
2146 *)
2147
2148 mutable c_parenb : bool ; (* Enable parity generation and detection.
2149 *)
2150
2151 mutable c_parodd : bool ; (* Specify odd parity instead of even.
2152 *)
2153
2154 mutable c_hupcl : bool ; (* Hang up on last close.
2155 *)
2156
2157 mutable c_clocal : bool ; (* Ignore modem status lines.
2158 *)
2159
2160 mutable c_isig : bool ; (* Generate signal on INTR, QUIT, SUSP.
2161 *)
2162
2163 mutable c_icanon : bool ; (* Enable canonical processing (line buffer‐
2164 ing and editing)
2165 *)
2166
2167 mutable c_noflsh : bool ; (* Disable flush after INTR, QUIT, SUSP.
2168 *)
2169
2170 mutable c_echo : bool ; (* Echo input characters.
2171 *)
2172
2173 mutable c_echoe : bool ; (* Echo ERASE (to erase previous character).
2174 *)
2175
2176 mutable c_echok : bool ; (* Echo KILL (to erase the current line).
2177 *)
2178
2179 mutable c_echonl : bool ; (* Echo NL even if c_echo is not set.
2180 *)
2181
2182 mutable c_vintr : char ; (* Interrupt character (usually ctrl-C).
2183 *)
2184
2185 mutable c_vquit : char ; (* Quit character (usually ctrl-\).
2186 *)
2187
2188 mutable c_verase : char ; (* Erase character (usually DEL or ctrl-H).
2189 *)
2190
2191 mutable c_vkill : char ; (* Kill line character (usually ctrl-U).
2192 *)
2193
2194 mutable c_veof : char ; (* End-of-file character (usually ctrl-D).
2195 *)
2196
2197 mutable c_veol : char ; (* Alternate end-of-line char. (usually none).
2198 *)
2199
2200 mutable c_vmin : int ; (* Minimum number of characters to read before
2201 the read request is satisfied.
2202 *)
2203
2204 mutable c_vtime : int ; (* Maximum read wait (in 0.1s units).
2205 *)
2206
2207 mutable c_vstart : char ; (* Start character (usually ctrl-Q).
2208 *)
2209
2210 mutable c_vstop : char ; (* Stop character (usually ctrl-S).
2211 *)
2212 }
2213
2214
2215
2216
2217
2218 val tcgetattr : file_descr -> terminal_io
2219
2220 Return the status of the terminal referred to by the given file
2221 descriptor.
2222
2223
2224 type setattr_when = Unix.setattr_when =
2225 | TCSANOW
2226 | TCSADRAIN
2227 | TCSAFLUSH
2228
2229
2230
2231
2232
2233 val tcsetattr : file_descr -> mode:setattr_when -> terminal_io -> unit
2234
2235 Set the status of the terminal referred to by the given file descrip‐
2236 tor. The second argument indicates when the status change takes place:
2237 immediately ( TCSANOW ), when all pending output has been transmitted (
2238 TCSADRAIN ), or after flushing all input that has been received but not
2239 read ( TCSAFLUSH ). TCSADRAIN is recommended when changing the output
2240 parameters; TCSAFLUSH , when changing the input parameters.
2241
2242
2243
2244 val tcsendbreak : file_descr -> duration:int -> unit
2245
2246 Send a break condition on the given file descriptor. The second argu‐
2247 ment is the duration of the break, in 0.1s units; 0 means standard
2248 duration (0.25s).
2249
2250
2251
2252 val tcdrain : file_descr -> unit
2253
2254 Waits until all output written on the given file descriptor has been
2255 transmitted.
2256
2257
2258 type flush_queue = Unix.flush_queue =
2259 | TCIFLUSH
2260 | TCOFLUSH
2261 | TCIOFLUSH
2262
2263
2264
2265
2266
2267 val tcflush : file_descr -> mode:flush_queue -> unit
2268
2269 Discard data written on the given file descriptor but not yet transmit‐
2270 ted, or data received but not yet read, depending on the second argu‐
2271 ment: TCIFLUSH flushes data received but not read, TCOFLUSH flushes
2272 data written but not transmitted, and TCIOFLUSH flushes both.
2273
2274
2275 type flow_action = Unix.flow_action =
2276 | TCOOFF
2277 | TCOON
2278 | TCIOFF
2279 | TCION
2280
2281
2282
2283
2284
2285 val tcflow : file_descr -> mode:flow_action -> unit
2286
2287 Suspend or restart reception or transmission of data on the given file
2288 descriptor, depending on the second argument: TCOOFF suspends output,
2289 TCOON restarts output, TCIOFF transmits a STOP character to suspend
2290 input, and TCION transmits a START character to restart input.
2291
2292
2293
2294 val setsid : unit -> int
2295
2296 Put the calling process in a new session and detach it from its con‐
2297 trolling terminal.
2298
2299
2300
2301
2302
2303OCamldoc 2019-07-30 UnixLabels(3)