<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <link rel="stylesheet" href="style.css" type="text/css"> <meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type"> <link rel="Start" href="index.html"> <link rel="previous" href="Neturl_tut.html"> <link rel="next" href="Netpop.html"> <link rel="Up" href="index.html"> <link title="Index of types" rel=Appendix href="index_types.html"> <link title="Index of exceptions" rel=Appendix href="index_exceptions.html"> <link title="Index of values" rel=Appendix href="index_values.html"> <link title="Index of class attributes" rel=Appendix href="index_attributes.html"> <link title="Index of class methods" rel=Appendix href="index_methods.html"> <link title="Index of classes" rel=Appendix href="index_classes.html"> <link title="Index of class types" rel=Appendix href="index_class_types.html"> <link title="Index of modules" rel=Appendix href="index_modules.html"> <link title="Index of module types" rel=Appendix href="index_module_types.html"> <link title="Uq_gtk" rel="Chapter" href="Uq_gtk.html"> <link title="Equeue" rel="Chapter" href="Equeue.html"> <link title="Unixqueue" rel="Chapter" href="Unixqueue.html"> <link title="Uq_engines" rel="Chapter" href="Uq_engines.html"> <link title="Uq_socks5" rel="Chapter" href="Uq_socks5.html"> <link title="Unixqueue_mt" rel="Chapter" href="Unixqueue_mt.html"> <link title="Equeue_intro" rel="Chapter" href="Equeue_intro.html"> <link title="Uq_ssl" rel="Chapter" href="Uq_ssl.html"> <link title="Uq_tcl" rel="Chapter" href="Uq_tcl.html"> <link title="Netcgi_common" rel="Chapter" href="Netcgi_common.html"> <link title="Netcgi" rel="Chapter" href="Netcgi.html"> <link title="Netcgi_ajp" rel="Chapter" href="Netcgi_ajp.html"> <link title="Netcgi_scgi" rel="Chapter" href="Netcgi_scgi.html"> <link title="Netcgi_cgi" rel="Chapter" href="Netcgi_cgi.html"> <link title="Netcgi_fcgi" rel="Chapter" href="Netcgi_fcgi.html"> <link title="Netcgi_dbi" rel="Chapter" href="Netcgi_dbi.html"> <link title="Netcgi1_compat" rel="Chapter" href="Netcgi1_compat.html"> <link title="Netcgi_test" rel="Chapter" href="Netcgi_test.html"> <link title="Netcgi_porting" rel="Chapter" href="Netcgi_porting.html"> <link title="Netcgi_plex" rel="Chapter" href="Netcgi_plex.html"> <link title="Http_client" rel="Chapter" href="Http_client.html"> <link title="Telnet_client" rel="Chapter" href="Telnet_client.html"> <link title="Ftp_data_endpoint" rel="Chapter" href="Ftp_data_endpoint.html"> <link title="Ftp_client" rel="Chapter" href="Ftp_client.html"> <link title="Nethttpd_types" rel="Chapter" href="Nethttpd_types.html"> <link title="Nethttpd_kernel" rel="Chapter" href="Nethttpd_kernel.html"> <link title="Nethttpd_reactor" rel="Chapter" href="Nethttpd_reactor.html"> <link title="Nethttpd_engine" rel="Chapter" href="Nethttpd_engine.html"> <link title="Nethttpd_services" rel="Chapter" href="Nethttpd_services.html"> <link title="Nethttpd_plex" rel="Chapter" href="Nethttpd_plex.html"> <link title="Nethttpd_intro" rel="Chapter" href="Nethttpd_intro.html"> <link title="Netplex_types" rel="Chapter" href="Netplex_types.html"> <link title="Netplex_mp" rel="Chapter" href="Netplex_mp.html"> <link title="Netplex_mt" rel="Chapter" href="Netplex_mt.html"> <link title="Netplex_log" rel="Chapter" href="Netplex_log.html"> <link title="Netplex_controller" rel="Chapter" href="Netplex_controller.html"> <link title="Netplex_container" rel="Chapter" href="Netplex_container.html"> <link title="Netplex_sockserv" rel="Chapter" href="Netplex_sockserv.html"> <link title="Netplex_workload" rel="Chapter" href="Netplex_workload.html"> <link title="Netplex_main" rel="Chapter" href="Netplex_main.html"> <link title="Netplex_config" rel="Chapter" href="Netplex_config.html"> <link title="Netplex_kit" rel="Chapter" href="Netplex_kit.html"> <link title="Rpc_netplex" rel="Chapter" href="Rpc_netplex.html"> <link title="Netplex_cenv" rel="Chapter" href="Netplex_cenv.html"> <link title="Netplex_intro" rel="Chapter" href="Netplex_intro.html"> <link title="Netshm" rel="Chapter" href="Netshm.html"> <link title="Netshm_data" rel="Chapter" href="Netshm_data.html"> <link title="Netshm_hashtbl" rel="Chapter" href="Netshm_hashtbl.html"> <link title="Netshm_array" rel="Chapter" href="Netshm_array.html"> <link title="Netshm_intro" rel="Chapter" href="Netshm_intro.html"> <link title="Netconversion" rel="Chapter" href="Netconversion.html"> <link title="Netchannels" rel="Chapter" href="Netchannels.html"> <link title="Netstream" rel="Chapter" href="Netstream.html"> <link title="Mimestring" rel="Chapter" href="Mimestring.html"> <link title="Netmime" rel="Chapter" href="Netmime.html"> <link title="Netsendmail" rel="Chapter" href="Netsendmail.html"> <link title="Neturl" rel="Chapter" href="Neturl.html"> <link title="Netaddress" rel="Chapter" href="Netaddress.html"> <link title="Netbuffer" rel="Chapter" href="Netbuffer.html"> <link title="Netdate" rel="Chapter" href="Netdate.html"> <link title="Netencoding" rel="Chapter" href="Netencoding.html"> <link title="Netulex" rel="Chapter" href="Netulex.html"> <link title="Netaccel" rel="Chapter" href="Netaccel.html"> <link title="Netaccel_link" rel="Chapter" href="Netaccel_link.html"> <link title="Nethtml" rel="Chapter" href="Nethtml.html"> <link title="Netstring_str" rel="Chapter" href="Netstring_str.html"> <link title="Netstring_pcre" rel="Chapter" href="Netstring_pcre.html"> <link title="Netstring_mt" rel="Chapter" href="Netstring_mt.html"> <link title="Netmappings" rel="Chapter" href="Netmappings.html"> <link title="Netaux" rel="Chapter" href="Netaux.html"> <link title="Nethttp" rel="Chapter" href="Nethttp.html"> <link title="Netchannels_tut" rel="Chapter" href="Netchannels_tut.html"> <link title="Netmime_tut" rel="Chapter" href="Netmime_tut.html"> <link title="Netsendmail_tut" rel="Chapter" href="Netsendmail_tut.html"> <link title="Netulex_tut" rel="Chapter" href="Netulex_tut.html"> <link title="Neturl_tut" rel="Chapter" href="Neturl_tut.html"> <link title="Netsys" rel="Chapter" href="Netsys.html"> <link title="Netpop" rel="Chapter" href="Netpop.html"> <link title="Rpc_auth_dh" rel="Chapter" href="Rpc_auth_dh.html"> <link title="Rpc_key_service" rel="Chapter" href="Rpc_key_service.html"> <link title="Rpc_time" rel="Chapter" href="Rpc_time.html"> <link title="Rpc_auth_local" rel="Chapter" href="Rpc_auth_local.html"> <link title="Rtypes" rel="Chapter" href="Rtypes.html"> <link title="Xdr" rel="Chapter" href="Xdr.html"> <link title="Rpc" rel="Chapter" href="Rpc.html"> <link title="Rpc_program" rel="Chapter" href="Rpc_program.html"> <link title="Rpc_portmapper_aux" rel="Chapter" href="Rpc_portmapper_aux.html"> <link title="Rpc_packer" rel="Chapter" href="Rpc_packer.html"> <link title="Rpc_transport" rel="Chapter" href="Rpc_transport.html"> <link title="Rpc_client" rel="Chapter" href="Rpc_client.html"> <link title="Rpc_simple_client" rel="Chapter" href="Rpc_simple_client.html"> <link title="Rpc_portmapper_clnt" rel="Chapter" href="Rpc_portmapper_clnt.html"> <link title="Rpc_portmapper" rel="Chapter" href="Rpc_portmapper.html"> <link title="Rpc_server" rel="Chapter" href="Rpc_server.html"> <link title="Rpc_auth_sys" rel="Chapter" href="Rpc_auth_sys.html"> <link title="Rpc_intro" rel="Chapter" href="Rpc_intro.html"> <link title="Rpc_mapping_ref" rel="Chapter" href="Rpc_mapping_ref.html"> <link title="Rpc_ssl" rel="Chapter" href="Rpc_ssl.html"> <link title="Rpc_xti_client" rel="Chapter" href="Rpc_xti_client.html"> <link title="Shell_sys" rel="Chapter" href="Shell_sys.html"> <link title="Shell" rel="Chapter" href="Shell.html"> <link title="Shell_uq" rel="Chapter" href="Shell_uq.html"> <link title="Shell_mt" rel="Chapter" href="Shell_mt.html"> <link title="Shell_intro" rel="Chapter" href="Shell_intro.html"> <link title="Netsmtp" rel="Chapter" href="Netsmtp.html"><link title="Helper functions" rel="Section" href="#1_Helperfunctions"> <link title="Standard POSIX functions" rel="Section" href="#1_StandardPOSIXfunctions"> <link title="POSIX Shared Memory" rel="Section" href="#1_POSIXSharedMemory"> <title>Ocamlnet 2 Reference Manual : Netsys</title> </head> <body> <div class="navbar"><a href="Neturl_tut.html">Previous</a> <a href="index.html">Up</a> <a href="Netpop.html">Next</a> </div> <center><h1>Module <a href="type_Netsys.html">Netsys</a></h1></center> <br> <pre><span class="keyword">module</span> Netsys: <code class="code">sig</code> <a href="Netsys.html">..</a> <code class="code">end</code></pre>Some POSIX system calls missing in the <code class="code">Unix</code> module<br> <hr width="100%"> <br> <a name="1_Helperfunctions"></a> <h1>Helper functions</h1><br> <pre><span class="keyword">val</span> <a name="VALrestart"></a>restart : <code class="type">('a -> 'b) -> 'a -> 'b</code></pre><div class="info"> <code class="code">restart f arg</code> calls <code class="code">f arg</code>, and restarts this call if the exception <code class="code">Unix_error(EINTR,_,_)</code> is caught. <p> Note that there are some cases where this handling of <code class="code">EINTR</code> is not sufficient:<ul> <li>Functions that have a timeout argument like <code class="code">Unix.select</code>: When <code class="code">EINTR</code> is caught the timeout should be adjusted.</li> <li><code class="code">Unix.connect</code> with a blocking descriptor because this is not well-enough specified by POSIX</li> </ul> <br> </div> <pre><span class="keyword">val</span> <a name="VALrestarting_select"></a>restarting_select : <code class="type">Unix.file_descr list -><br> Unix.file_descr list -><br> Unix.file_descr list -><br> float -> Unix.file_descr list * Unix.file_descr list * Unix.file_descr list</code></pre><div class="info"> A wrapper around <code class="code">Unix.select</code> that handles the <code class="code">EINTR</code> condition<br> </div> <pre><span class="keyword">val</span> <a name="VALreally_write"></a>really_write : <code class="type">Unix.file_descr -> string -> int -> int -> unit</code></pre><div class="info"> <code class="code">really_write fd s pos len</code>: Writes exactly the <code class="code">len</code> bytes from <code class="code">s</code> to <code class="code">fd</code> starting at <code class="code">pos</code>. The conditions <code class="code">EINTR</code>, <code class="code">EAGAIN</code> and <code class="code">EWOULDBLOCK</code> are handled.<br> </div> <pre><span class="keyword">val</span> <a name="VALblocking_read"></a>blocking_read : <code class="type">Unix.file_descr -> string -> int -> int -> int</code></pre><div class="info"> <code class="code">let p = blocking_read fd s pos len</code>: Reads exactly <code class="code">p</code> bytes from <code class="code">fd</code> and stores them in <code class="code">s</code> starting at <code class="code">pos</code> where <code class="code">p</code> is the minimum of <code class="code">len</code> and the number of bytes that are available on <code class="code">fd</code> until the end of the file. If the function is called with <code class="code">len>0</code> but returns less than <code class="code">len</code> this indicates end of file. The conditions <code class="code">EINTR</code>, <code class="code">EAGAIN</code> and <code class="code">EWOULDBLOCK</code> are handled.<br> </div> <pre><span class="keyword">val</span> <a name="VALreally_read"></a>really_read : <code class="type">Unix.file_descr -> string -> int -> int -> unit</code></pre><div class="info"> <code class="code">really_read fd s pos len</code>: Reads exactly <code class="code">len</code> bytes from <code class="code">fd</code> and stores them in <code class="code">s</code> starting at <code class="code">pos</code>. If the end of file condition is seen before <code class="code">len</code> bytes are read, the exception <code class="code">End_of_file</code> is raised, and it is unspecified how many bytes have been stored in <code class="code">s</code>. The conditions <code class="code">EINTR</code>, <code class="code">EAGAIN</code> and <code class="code">EWOULDBLOCK</code> are handled.<br> </div> <br> <a name="1_StandardPOSIXfunctions"></a> <h1>Standard POSIX functions</h1><br> <pre><span class="keyword">val</span> <a name="VALint_of_file_descr"></a>int_of_file_descr : <code class="type">Unix.file_descr -> int</code></pre><div class="info"> Return the file descriptor as integer<br> </div> <pre><span class="keyword">val</span> <a name="VALfile_descr_of_int"></a>file_descr_of_int : <code class="type">int -> Unix.file_descr</code></pre><div class="info"> Make a file descriptor from an integer<br> </div> <pre><span class="keyword">val</span> <a name="VAL_exit"></a>_exit : <code class="type">int -> unit</code></pre><div class="info"> Exit the program immediately without running the atexit handlers. The argument is the exit code, just as for <code class="code">exit</code>.<br> </div> <pre><span class="keyword">val</span> <a name="VALsysconf_open_max"></a>sysconf_open_max : <code class="type">unit -> int</code></pre><div class="info"> Return the maximum number of open file descriptor per process. It is also ensured that for every file descriptor <code class="code">fd</code>: <code class="code">fd < sysconf_open_max()</code><br> </div> <pre><span class="keyword">val</span> <a name="VALgetpgid"></a>getpgid : <code class="type">int -> int</code></pre><div class="info"> Return the process group ID of the process with the passed PID. For the number 0, the process group ID of the current process is returned.<br> </div> <pre><span class="keyword">val</span> <a name="VALgetpgrp"></a>getpgrp : <code class="type">unit -> int</code></pre><div class="info"> Same as <code class="code">getpgid 0</code>, i.e. returns the process group ID of the current process.<br> </div> <pre><span class="keyword">val</span> <a name="VALsetpgid"></a>setpgid : <code class="type">int -> int -> unit</code></pre><div class="info"> <code class="code">setpgid pid pgid</code>: Set the process group ID of the process <code class="code">pid</code> to <code class="code">pgid</code>. If <code class="code">pid = 0</code>, the process group ID of the current process is changed. If <code class="code">pgid = 0</code>, as process group ID the process ID of the process referenced by <code class="code">pid</code> is used. <p> It is only possible for a process to join a process group if both belong to the same session.<br> </div> <pre><span class="keyword">val</span> <a name="VALsetpgrp"></a>setpgrp : <code class="type">unit -> unit</code></pre><div class="info"> Same as <code class="code">setpgid 0 0</code>: A new process group ID is created, and the current process becomes its sole member.<br> </div> <pre><span class="keyword">val</span> <a name="VALtcgetpgrp"></a>tcgetpgrp : <code class="type">Unix.file_descr -> int</code></pre><div class="info"> Return the process group ID of the foreground process group of the session associated with the file descriptor, which must be a tty.<br> </div> <pre><span class="keyword">val</span> <a name="VALtcsetpgrp"></a>tcsetpgrp : <code class="type">Unix.file_descr -> int -> unit</code></pre><div class="info"> Sets the foreground process group ID of the session associated with the file descriptor, which must be a tty.<br> </div> <pre><span class="keyword">val</span> <a name="VALctermid"></a>ctermid : <code class="type">unit -> string</code></pre><div class="info"> Returns the name of the controlling tty of the current process as pathname to a device file<br> </div> <pre><span class="keyword">val</span> <a name="VALttyname"></a>ttyname : <code class="type">Unix.file_descr -> string</code></pre><div class="info"> Returns the name of the controlling tty referred to by the file descriptor.<br> </div> <pre><span class="keyword">val</span> <a name="VALgetsid"></a>getsid : <code class="type">int -> int</code></pre><div class="info"> Returns the session ID of the process with the passed PID. For the PID 0, the session ID of the current process is returned.<br> </div> <pre><span class="keyword">val</span> <a name="VALsetreuid"></a>setreuid : <code class="type">int -> int -> unit</code></pre><div class="info"> Changes both the real and the effective user ID of the current process.<br> </div> <pre><span class="keyword">val</span> <a name="VALsetregid"></a>setregid : <code class="type">int -> int -> unit</code></pre><div class="info"> Changes both the real and the effective group ID of the current process.<br> </div> <br> <a name="1_POSIXSharedMemory"></a> <h1>POSIX Shared Memory</h1><br> <pre><span class="keyword">val</span> <a name="VALhave_posix_shm"></a>have_posix_shm : <code class="type">unit -> bool</code></pre><div class="info"> Returns whether the OS supports POSIX shared memory<br> </div> <br><code><span class="keyword">type</span> <a name="TYPEshm_open_flag"></a><code class="type"></code>shm_open_flag = </code><table class="typetable"> <tr> <td align="left" valign="top" > <code><span class="keyword">|</span></code></td> <td align="left" valign="top" > <code><span class="constructor">SHM_O_RDONLY</span></code></td> </tr> <tr> <td align="left" valign="top" > <code><span class="keyword">|</span></code></td> <td align="left" valign="top" > <code><span class="constructor">SHM_O_RDWR</span></code></td> </tr> <tr> <td align="left" valign="top" > <code><span class="keyword">|</span></code></td> <td align="left" valign="top" > <code><span class="constructor">SHM_O_CREAT</span></code></td> </tr> <tr> <td align="left" valign="top" > <code><span class="keyword">|</span></code></td> <td align="left" valign="top" > <code><span class="constructor">SHM_O_EXCL</span></code></td> </tr> <tr> <td align="left" valign="top" > <code><span class="keyword">|</span></code></td> <td align="left" valign="top" > <code><span class="constructor">SHM_O_TRUNC</span></code></td> </tr></table> <pre><span class="keyword">val</span> <a name="VALshm_open"></a>shm_open : <code class="type">string -> <a href="Netsys.html#TYPEshm_open_flag">shm_open_flag</a> list -> int -> Unix.file_descr</code></pre><div class="info"> Opens a shared memory object. The first arg is the name of the object. The name must begin with a slash, but there must be no further slash in it (e.g. "/sample"). The second arg are the open flags. The third arg are the permission bits. <p> The open flags are interpreted as follows:<ul> <li><code class="code">SHM_O_RDONLY</code>: Open the object for read access</li> <li><code class="code">SHM_O_RDWR</code>: Open the object for read-write access</li> <li><code class="code">SHM_O_CREAT</code>: Create the object if it does not exist</li> <li><code class="code">SHM_O_EXCL</code>: If <code class="code">SHM_O_CREAT</code> was also specified, and a an object with the given name already exists, return an error (<code class="code">Unix.EEXIST</code>).</li> <li><code class="code">SHM_O_TRUNC</code>: If the object already exists, truncate it to zero bytes</li> </ul> One of <code class="code">SHM_O_RDONLY</code> or <code class="code">SHM_O_RDWR</code> must be given. <p> On success, the function returns a file descriptor representing the object. To access the object, one has to memory-map this file (in O'Caml use one of the <code class="code">map_file</code> functions in the <code class="code">Bigarray</code> module). Use <code class="code">Unix.ftruncate</code> to resize the object. <p> Note that it is unspecified whether this file pops up somewhere in the file system, and if so, where. <p> If a system error occurs, the function raises a <code class="code">Unix.Unix_error</code> exception.<br> </div> <pre><span class="keyword">val</span> <a name="VALshm_unlink"></a>shm_unlink : <code class="type">string -> unit</code></pre><div class="info"> Unlinks the name for a shared memory object<br> </div> </body></html>