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