123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020 |
- <?xml version="1.0" encoding="ISO8859-1"?>
- <fpdoc-descriptions>
- <!--
- $Id$
- This file is part of the FPC documentation.
- Copyright (C) 1997, by Michael Van Canneyt
-
- The FPC documentation is free text; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The FPC Documentation is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the FPC documentation; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA.
- -->
- <package name="rtl">
- <module name="ipc">
- <short>Unix Inter Process Communication functionality.</short>
- <!-- \FPCexampledir{ipcex} -->
- <descr>
- <p>
- This document describes the IPC unit for Free Pascal. It was written for
- linux by Michael Van Canneyt. It gives all the functionality of system V
- Inter-Process Communication: shared memory, semaphores and messages.
- It works only on the linux operating system.
- </p>
- <p>
- Many constants here are provided for completeness only, and should under
- normal circumstances not be used by the programmer.
- </p>
- </descr>
- <element name="IPCerror">
- <short>Last IPC error code</short>
- <descr>
- The <var>IPCerror</var> variable is used to report errors, by all calls.
- </descr>
- </element>
- <element name="IPC_CREAT">
- <short>Create if key is nonexistent</short>
- </element>
- <element name="IPC_EXCL">
- <short>fail if key exists</short>
- </element>
- <element name="IPC_NOWAIT">
- <short>return error on wait</short>
- </element>
- <element name="IPC_RMID">
- <short>Remove resource</short>
- </element>
- <element name="IPC_SET">
- <short>set ipc_perm options</short>
- </element>
- <element name="IPC_STAT">
- <short>get ipc_perm options</short>
- </element>
- <element name="IPC_INFO">
- <short>For ipcs call</short>
- </element>
- <element name="MSG_NOERROR">
- <short>Internal Message control code. Do not use</short>
- </element>
- <element name="MSG_EXCEPT">
- <short>Internal Message control code. Do not use</short>
- </element>
- <element name="MSGMNI">
- <short>Internal Message control code. Do not use</short>
- </element>
- <element name="MSGMAX">
- <short>Internal Message control code. Do not use</short>
- </element>
- <element name="MSGMNB">
- <short>Internal Message control code. Do not use</short>
- </element>
- <element name="SEM_UNDO">
- <short>Constant for use in <link id="semop"/></short>
- </element>
- <element name="GETPID">
- <short>Constant for use in <link id="semop"/></short>
- </element>
- <element name="GETVAL">
- <short>Constant for use in <link id="semop"/></short>
- </element>
- <element name="GETALL">
- <short>Constant for use in <link id="semop"/></short>
- </element>
- <element name="GETNCNT">
- <short>Constant for use in <link id="semop"/></short>
- </element>
- <element name="GETZCNT">
- <short>Constant for use in <link id="semop"/></short>
- </element>
- <element name="SETVAL">
- <short>Constant for use in <link id="semop"/></short>
- </element>
- <element name="SETALL">
- <short>Constant for use in <link id="semop"/></short>
- </element>
- <element name="SEMMNI">
- <short>Internal semaphore system constant. Do not use.</short>
- </element>
- <element name="SEMMSL">
- <short>Internal semaphore system constant. Do not use.</short>
- </element>
- <element name="SEMMNS">
- <short>Internal semaphore system constant. Do not use.</short>
- </element>
- <element name="SEMOPM">
- <short>Internal semaphore system constant. Do not use.</short>
- </element>
- <element name="SEMVMX">
- <short>Internal semaphore system constant. Do not use.</short>
- </element>
- <element name="SHM_R">
- <short>This constant is used in the <link id="shmctl"/> call.</short>
- </element>
- <element name="SHM_W">
- <short>This constant is used in the <link id="shmctl"/> call.</short>
- </element>
- <element name="SHM_RDONLY">
- <short>This constant is used in the <link id="shmctl"/> call.</short>
- </element>
- <element name="SHM_RND">
- <short>This constant is used in the <link id="shmctl"/> call.</short>
- </element>
- <element name="SHM_REMAP">
- <short>This constant is used in the <link id="shmctl"/> call.</short>
- </element>
- <element name="SHM_LOCK">
- <short>This constant is used in the <link id="shmctl"/> call.</short>
- </element>
- <element name="SHM_UNLOCK">
- <short>This constant is used in the <link id="shmctl"/> call.</short>
- </element>
- <element name="BaseUnix">
- <short>Some base types</short>
- </element>
- <element name="key_t">
- <short>Alias for <link id="TKey"/> type</short>
- </element>
- <element name="TIPC_Perm.mode">
- <short>Creation Mode</short>
- </element>
- <element name="TSHMinfo.shmmni">
- <short>?</short>
- </element>
- <element name="msglen_t">
- <short>Message length type</short>
- </element>
- <element name="msgqnum_t">
- <short>Message queue number type</short>
- </element>
- <element name="PMSG">
- <short>Pointer to <link id="TMSG"/> record</short>
- </element>
- <element name="PMSQid_ds">
- <short>Pointer to <link id="TMSQid_ds"/></short>
- </element>
- <element name="PMSGbuf">
- <short>Pointer to <link id="TMsgBuf"/> rcord</short>
- </element>
- <element name="SEM_GETPID">
- <short>Semaphore operation: Get process ID of last operation.</short>
- </element>
- <element name="SEM_GETVAL">
- <short>Semaphore operation: Get current value of semaphore</short>
- </element>
- <element name="SEM_GETALL">
- <short>Semaphore operation: Get all semaphore values</short>
- </element>
- <element name="SEM_GETNCNT">
- <short>Semaphore operation: Get number of processes waiting for resource.</short>
- </element>
- <element name="SEM_GETZCNT">
- <short>Semaphore operation: Get number of processes waiting for semaphores to reach zero </short>
- </element>
- <element name="SEM_SETVAL">
- <short>Semaphore operation: Set semaphore value</short>
- </element>
- <element name="SEM_SETALL">
- <short>Semaphore operation: Set all semaphore values</short>
- </element>
- <element name="SEM_SEMMNI">
- <short>Semaphore operation: ?</short>
- </element>
- <element name="SEM_SEMMSL">
- <short>Semaphore operation: ?</short>
- </element>
- <element name="SEM_SEMMNS">
- <short>Semaphore operation: ?</short>
- </element>
- <element name="SEM_SEMOPM">
- <short>Semaphore operation: ?</short>
- </element>
- <element name="SEM_SEMVMX">
- <short>Semaphore operation: ?</short>
- </element>
- <element name="TSEMid_ds.sem_nsems">
- <short>Number of semaphores</short>
- </element>
- <element name="PULong">
- <short>Pointer to cardinal type.</short>
- </element>
- <element name="PWord">
- <short>Pointer to word type.</short>
- </element>
- <element name="TKey">
- <short>Type returned by the <link id="ftok"/> key generating
- function.</short>
- </element>
- <element name="TIPC_Perm">
- <short>Record used in all IPC systems to specify the permissions.</short>
- <descr>
- <var>TIPC_Perm</var> is used in all IPC systems to specify the permissions.
- It should never be used directly.
- </descr>
- </element>
- <element name="TIPC_Perm.Key">
- <short>key used to create resource</short>
- </element>
- <element name="TIPC_Perm.uid">
- <short>Owner user ID</short>
- </element>
- <element name="TIPC_Perm.gid">
- <short>Owner group id</short>
- </element>
- <element name="TIPC_Perm.cuid">
- <short>Creator user ID</short>
- </element>
- <element name="TIPC_Perm.cgid">
- <short>Creator group ID</short>
- </element>
- <element name="TIPC_Perm.seq">
- <short>?</short>
- </element>
- <element name="PIPC_Perm">
- <short>Pointer to <link id="TIPC_Perm"/> record.</short>
- </element>
- <element name="TSHMid_ds">
- <short>Record used in the <link id="shmctl"/> call to set or retrieve settings for shared memory.</short>
- </element>
- <element name="PSHMid_DS">
- <short>Pointer to <link id="TSHMid_ds"/> record.</short>
- </element>
- <element name="TSHMid_ds.shm_perm">
- <short>Permissions</short>
- </element>
- <element name="TSHMid_ds.shm_segsz">
- <short>Segment size</short>
- </element>
- <element name="TSHMid_ds.shm_atime">
- <short>Last access time</short>
- </element>
- <element name="TSHMid_ds.shm_dtime">
- <short>Last detach time</short>
- </element>
- <element name="TSHMid_ds.shm_ctime">
- <short>Create time</short>
- </element>
- <element name="TSHMid_ds.shm_cpid">
- <short>Creator PID</short>
- </element>
- <element name="TSHMid_ds.shm_lpid">
- <short>Last operation PID</short>
- </element>
- <element name="TSHMid_ds.shm_nattch">
- <short>Number of attachments</short>
- </element>
- <element name="TSHMid_ds.shm_npages">
- <short>Number of pages</short>
- </element>
- <element name="TSHMid_ds.shm_pages">
- <short>?</short>
- </element>
- <element name="TSHMid_ds.attaches">
- <short>?</short>
- </element>
- <element name="TSHMinfo">
- <short>Record used by the shared memory system, Do not use directly.</short>
- </element>
- <element name="TSHMinfo.shmmax" skip="1"/>
- <element name="TSHMinfo.shmmin" skip="1"/>
- <element name="TSHMinfo.smmni" skip="1"/>
- <element name="TSHMinfo.shmseg" skip="1"/>
- <element name="TSHMinfo.shmall" skip="1"/>
- <element name="PSHMinfo" skip="1"/>
- <element name="TMSG">
- <short>Record used in the handling of message queues. Do not use directly.</short>
- </element>
- <element name="TMSG.msg_next" skip="1"/>
- <element name="TMSG.msg_type" skip="1"/>
- <element name="TMSG.msg_spot" skip="1"/>
- <element name="TMSG.msg_stime" skip="1"/>
- <element name="TMSG.msg_ts" skip="1"/>
- <element name="TMSQid_ds">
- <short>Record returned by the <link id="msgctl"/> call, contains all data about a message queue.</short>
- <descr>
- This record should never be used directly, it is an internal kernel record.
- It's fields may change at any time.
- </descr>
- </element>
- <element name="TMSQid_ds.msg_perm">
- <short>Queue permissions</short>
- </element>
- <element name="TMSQid_ds.msg_first">
- <short>Pointer to first message</short>
- </element>
- <element name="TMSQid_ds.msg_last">
- <short>Pointer to last message</short>
- </element>
- <element name="TMSQid_ds.msg_stime">
- <short>Last send time</short>
- </element>
- <element name="TMSQid_ds.msg_rtime">
- <short>Last receive time</short>
- </element>
- <element name="TMSQid_ds.msg_ctime">
- <short>Last control time</short>
- </element>
- <element name="TMSQid_ds.wwait">
- <short></short>
- </element>
- <element name="TMSQid_ds.rwait">
- <short></short>
- </element>
- <element name="TMSQid_ds.msg_cbytes">
- <short></short>
- </element>
- <element name="TMSQid_ds.msg_qnum">
- <short></short>
- </element>
- <element name="TMSQid_ds.msg_qbytes">
- <short></short>
- </element>
- <element name="TMSQid_ds.msg_lspid">
- <short></short>
- </element>
- <element name="TMSQid_ds.msg_lrpid">
- <short></short>
- </element>
- <element name="TMSGbuf">
- <short>Generic message data record</short>
- <descr>
- The <var>TMSGbuf</var> record is a record containing the data of a record. you
- should never use this record directly, instead you should make your own
- record that follows the structure of the <var>TMSGbuf</var> record, but that has
- a size that is big enough to accomodate your messages. The <var>mtype</var> field
- should always be present, and should always be filled.
- </descr>
- </element>
- <element name="TMSGbuf.mtype">
- <short>Message type</short>
- </element>
- <element name="TMSGbuf.mtext">
- <short>Message data</short>
- </element>
- <element name="TMSGinfo" skip="1">
- <short>Internal message system record. Do not use directly.</short>
- </element>
- <element name="TMSGinfo.msgpool" skip="1"/>
- <element name="TMSGinfo.msgmap" skip="1"/>
- <element name="TMSGinfo.msgmax" skip="1"/>
- <element name="TMSGinfo.msgmax" skip="1"/>
- <element name="TMSGinfo.msgmnb" skip="1"/>
- <element name="TMSGinfo.msgmni" skip="1"/>
- <element name="TMSGinfo.msgssz" skip="1"/>
- <element name="TMSGinfo.msgtql" skip="1"/>
- <element name="TMSGinfo.msgseg" skip="1"/>
- <element name="PMSGinfo" skip="1">
- <short>Pointer to <link id="TMSGinfo"/> record</short>
- </element>
- <element name="TSEMid_ds">
- <short>Structure returned by the <link id="semctl"/> call, contains all data of a semahore</short>
- </element>
- <element name="PSEMid_ds">
- <short>Pointer to <link id="TSEMid_ds"/> record.</short>
- </element>
- <element name="TSEMid_ds.sem_perm">
- <short>IPC permissions</short>
- </element>
- <element name="TSEMid_ds.sem_otime">
- <short>Last operation time</short>
- </element>
- <element name="TSEMid_ds.sem_ctime">
- <short>Create time</short>
- </element>
- <element name="TSEMid_ds.sem_base">
- <short>Internal data. Do not use</short>
- </element>
- <element name="TSEMid_ds.sem_pending">
- <short>Internal data. Do not use</short>
- </element>
- <element name="TSEMid_ds.sem_pending_last">
- <short>Internal data. Do not use</short>
- </element>
- <element name="TSEMid_ds.undo">
- <short>Internal data. Do not use</short>
- </element>
- <element name="TSEMid_ds.nsems">
- <short>Internal data. Do not use</short>
- </element>
- <element name="TSEMbuf">
- <short>Record used in <link id="semop"/> call.</short>
- <descr>
- The <var>TSEMbuf</var> record is used in the <link id="semop"/> call, and is
- used to specify which operations you want to do.
- </descr>
- </element>
- <element name="PSEMbuf">
- <short>Pointer to <link id="TSembuf"/> record.</short>
- </element>
- <element name="TSEMbuf.sem_num">
- <short>Number of the semaphore to perform operation on.</short>
- </element>
- <element name="TSEMbuf.sem_op">
- <short>Operation to perform on semaphore</short>
- </element>
- <element name="TSEMbuf.sem_flg">
- <short>Flags for operation.</short>
- </element>
- <element name="TSEMinfo" skip="1">
- <short>Internal semaphore system record. Do not use.</short>
- </element>
- <element name="TSEMinfo.semmap" skip="1"/>
- <element name="TSEMinfo.semmni" skip="1"/>
- <element name="TSEMinfo.semmns" skip="1"/>
- <element name="TSEMinfo.semmnu" skip="1"/>
- <element name="TSEMinfo.semmsl" skip="1"/>
- <element name="TSEMinfo.semopm" skip="1"/>
- <element name="TSEMinfo.semume" skip="1"/>
- <element name="TSEMinfo.semusz" skip="1"/>
- <element name="TSEMinfo.semvmx" skip="1"/>
- <element name="TSEMinfo.semaem" skip="1"/>
- <element name="PSEMinfo">
- <short>Pointer to <link id="TSEMinfo"/> record.</short>
- </element>
- <element name="TSEMun">
- <short>Record used in <link id="semctl"/> call.</short>
- </element>
- <element name="PSEMun">
- <short>Pointer to <link id="TSEMun"/> record</short>
- </element>
- <element name="ftok">
- <short>Create token from filename</short>
- <descr>
- <p>
- <var>ftok</var> returns a key that can be used in a <link id="semget"/>
- <link id="shmget"/>
- or <link id="msgget"/> call to access a new or existing IPC resource.
- </p>
- <p>
- <var>Path</var> is the name of a file in the file system, <var>ID</var> is a
- character of your choice. The ftok call does the same as it's C couterpart,
- so a pascal program and a C program will access the same resource if
- they use the same <var>Path</var> and <var>ID</var>
- </p>
- <p>
- For an example, see <link id="msgctl"/>, <link id="semctl"/> or <link id="shmctl"/>.
- </p>
- </descr>
- <errors>
- <var>ftok</var> returns -1 if the file in <var>Path</var> doesn't exist.
- </errors>
- <seealso>
- <link id="semget"/>
- <link id="shmget"/>
- <link id="msgget"/>
- </seealso>
- </element>
- <element name="msgget">
- <short>Return message queue ID, possibly creating the queue</short>
- <descr>
- <p>
- <var>msgget</var> returns the ID of the message queue described by <var>key</var>.
- Depending on the flags in <var>msgflg</var>, a new queue is created.
- </p>
- <p>
- <var>msgflg</var> can have one or more of the following values (combined by ORs):
- </p>
- <dl>
- <dt>IPC_CREAT</dt><dd> The queue is created if it doesn't already exist.</dd>
- <dt>IPC_EXCL</dt><dd> If used in combination with <var>IPC_CREAT</var>, causes the
- call to fail if the queue already exists. It cannot be used by itself.
- </dd>
- </dl>
- <p>
- Optionally, the flags can be <var>OR</var>ed with a permission mode, which is the
- same mode that can be used in the file system.
- </p>
- <p>
- For an example, see <link id="msgctl"/>.
- </p>
- </descr>
- <errors>
- On error, -1 is returned, and <var>IPCError</var> is set.
- </errors>
- <seealso>
- <link id="ftok"/>
- <link id="msgsnd"/>
- <link id="msgrcv"/>
- <link id="msgctl"/>
- </seealso>
- </element>
- <element name="msgsnd">
- <short>Send a message to the messague queue</short>
- <descr>
- <p>
- <var>msgsend</var> sends a message to a message queue with ID <var>msqid</var>.
- <var>msgp</var> is a pointer to a message buffer, that should be based on the
- <var>TMsgBuf</var> type. <var>msgsiz</var> is the size of the message (NOT of the
- message buffer record !)
- </p>
- <p>
- The <var>msgflg</var> can have a combination of the following values (ORed
- together):
- </p>
- <dl>
- <dt>0</dt><dd>No special meaning. The message will be written to the queue.
- If the queue is full, then the process is blocked.</dd>
- <dt>IPC_NOWAIT</dt><dd> If the queue is full, then no message is written,
- and the call returns immediatly.
- </dd>
- </dl>
- <p>
- The function returns <var>True</var> if the message was sent successfully,
- <var>False</var> otherwise.
- </p>
- <p>
- For an example, see <link id="msgctl"/>.
- </p>
- </descr>
- <errors>
- In case of error, the call returns <var>False</var>, and <var>IPCerror</var> is set.
- </errors>
- <seealso>
- <link id="msgget"/>
- <link id="msgrcv"/>
- <link id="msgctl"/>
- </seealso>
- </element>
- <element name="msgrcv">
- <short>Retrieve a message from the queue</short>
- <descr>
- <p>
- <var>msgrcv</var> retrieves a message of type <var>msgtyp</var> from the message
- queue with ID <var>msqid</var>. <var>msgtyp</var> corresponds to the <var>mtype</var>
- field of the <var>TMSGbuf</var> record. The message is stored in the <var>MSGbuf</var>
- structure pointed to by <var>msgp</var>.
- </p>
- <p>
- The <var>msgflg</var> parameter can be used to control the behaviour of the
- <var>msgrcv</var> call. It consists of an ORed combination of the following
- flags:
- </p>
- <dl>
- <dt>0</dt><dd> No special meaning.</dd>
- <dt>IPC_NOWAIT</dt><dd>if no messages are available, then the call returns
- immediatly, with the <var>ENOMSG</var> error.</dd>
- <dt>MSG_NOERROR</dt><dd> If the message size is wrong (too large),
- no error is generated, instead the message is truncated.
- Normally, in such cases, the call returns an error (E2BIG)
- </dd>
- </dl>
- <p>
- The function returns <var>True</var> if the message was received correctly,
- <var>False</var> otherwise.
- </p>
- <p>
- For an example, see <link id="msgctl"/>.
- </p>
- </descr>
- <errors>
- In case of error, <var>False</var> is returned, and <var>IPCerror</var> is set.
- </errors>
- <seealso>
- <link id="msgget"/>
- <link id="msgsnd"/>
- <link id="msgctl"/>
- </seealso>
- </element>
- <element name="msgctl">
- <short>Perform various operations on a message queue</short>
- <descr>
- <p>
- <var>msgctl</var> performs various operations on the message queue with id
- <var>ID</var>. Which operation is performed, depends on the <var>cmd</var>
- parameter, which can have one of the following values:
- </p>
- <dl>
- <dt>IPC_STAT</dt><dd> In this case, the <var>msgctl</var> call fills the
- <var>TMSQid_ds</var> structure with information about the message queue.
- </dd>
- <dt>IPC_SET</dt><dd> in this case, the <var>msgctl</var> call sets the permissions
- of the queue as specified in the <var>ipc_perm</var> record inside <var>buf</var>.
- </dd><dt>IPC_RMID</dt><dd> If this is specified, the message queue will be removed
- from the system.
- </dd>
- </dl>
- <p>
- <var>buf</var> contains the data that are needed by the call. It can be
- <var>Nil</var> in case the message queue should be removed.
- </p>
- <p>
- The function returns <var>True</var> if successfull, <var>False</var> otherwise.
- </p>
- </descr>
- <errors>
- On error, <var>False</var> is returned, and <var>IPCerror</var> is set accordingly.
- </errors>
- <seealso>
- <link id="msgget"/>
- <link id="msgsnd"/>
- <link id="msgrcv"/>
- </seealso>
- <example file="ipcex/msgtool"/>
- </element>
- <element name="semget">
- <short>Return the ID of a semaphore set, possibly creating the set</short>
- <descr>
- <p>
- <var>msgget</var> returns the ID of the semaphore set described by <var>key</var>.
- Depending on the flags in <var>semflg</var>, a new queue is created.
- </p>
- <p>
- <var>semflg</var> can have one or more of the following values (combined by ORs):
- </p>
- <dl>
- <dt>IPC_CREAT</dt><dd> The queue is created if it doesn't already exist.</dd>
- <dt>IPC_EXCL</dt><dd> If used in combination with <var>IPC_CREAT</var>, causes the
- call to fail if the set already exists. It cannot be used by itself.</dd>
- </dl>
- <p>
- Optionally, the flags can be <var>OR</var>ed with a permission mode, which is the
- same mode that can be used in the file system.
- </p>
- <p>
- if a new set of semaphores is created, then there will be <var>nsems</var>
- semaphores in it.
- </p>
- </descr>
- <errors>
- On error, -1 is returned, and <var>IPCError</var> is set.
- </errors>
- <seealso>
- <link id="ftok"/>
- <link id="semop"/>
- <link id="semctl"/>
- </seealso>
- </element>
- <element name="semop">
- <short>Perform semaphore operation.</short>
- <descr>
- <p>
- <var>semop</var> performs a set of operations on a message queue.
- <var>sops</var> points to an array of type <var>TSEMbuf</var>. The array should
- contain <var>nsops</var> elements.
- </p>
- <p>
- The fields of the <link id="TSEMbuf"/> structure
- </p>
- <code>
- TSEMbuf = record
- sem_num : word;
- sem_op : integer;
- sem_flg : integer;
- </code>
- <p>
- should be filled as follows:
- </p>
- <dl>
- <dt>sem_num</dt><dd> The number of the semaphore in the set on which the
- operation must be performed.</dd>
- <dt>sem_op</dt><dd>
- The operation to be performed. The operation depends on the
- sign of <var>sem_op</var>:
- A positive number is simply added to the current value of the
- semaphore. If 0 (zero) is specified, then the process is suspended until the
- specified semaphore reaches zero. If a negative number is specified, it is substracted from the
- current value of the semaphore. If the value would become negative
- then the process is suspended until the value becomes big enough, unless
- <var>IPC_NOWAIT</var> is specified in the <var>sem_flg</var>.
- </dd>
- <dt>sem_flg</dt>
- <dd> Optional flags: if <var>IPC_NOWAIT</var> is specified, then the
- calling process will never be suspended.
- </dd>
- </dl>
- <p>
- The function returns <var>True</var> if the operations were successful,
- <var>False</var> otherwise.
- </p>
- </descr>
- <errors>
- In case of error, <var>False</var> is returned, and <var>IPCerror</var> is set.
- </errors>
- <seealso>
- <link id="semget"/>
- <link id="semctl"/>
- </seealso>
- </element>
- <element name="semctl">
- <short>Perform various control operations on a semaphore set</short>
- <descr>
- <p>
- <var>semctl</var> performs various operations on the semaphore <var>semnum</var> w
- ith semaphore set id <var>ID</var>.
- </p>
- <p>
- The <var>arg</var> parameter supplies the data needed for each call. This is
- a variant record that should be filled differently, according to the
- command:
- </p>
- <code>
- Type
- TSEMun = record
- case longint of
- 0 : ( val : longint );
- 1 : ( buf : PSEMid_ds );
- 2 : ( arr : PWord );
- 3 : ( padbuf : PSeminfo );
- 4 : ( padpad : pointer );
- end;
- </code>
- <p>
- Which operation is performed, depends on the <var>cmd</var>
- parameter, which can have one of the following values:
- </p>
- <dl>
- <dt>IPC_STAT</dt>
- <dd> In this case, the arg record should have it's <var>buf</var>
- field set to the address of a <var>TSEMid_ds</var> record.
- The <var>semctl</var> call fills this <var>TSEMid_ds</var> structure with information
- about the semaphore set.
- </dd>
- <dt>IPC_SET</dt>
- <dd> In this case, the <var>arg</var> record should have it's <var>buf</var>
- field set to the address of a <var>TSEMid_ds</var> record.
- The <var>semctl</var> call sets the permissions of the queue as specified in
- the <var>ipc_perm</var> record.
- </dd>
- <dt>IPC_RMID</dt>
- <dd> If this is specified, the semaphore set is removed from
- from the system.
- </dd>
- <dt>GETALL</dt>
- <dd> In this case, the <var>arr</var> field of <var>arg</var> should point
- to a memory area where the values of the semaphores will be stored.
- The size of this memory area is \var{SizeOf(Word)* Number of semaphores
- in the set}.
- This call will then fill the memory array with all the values of the
- semaphores.
- </dd>
- <dt>GETNCNT</dt>
- <dd> This will fill the <var>val</var> field of the <var>arg</var> union
- with the number of processes waiting for resources.
- </dd>
- <dt>GETPID</dt>
- <dd> <var>semctl</var> returns the process ID of the process that
- performed the last <link id="semop"/> call.
- </dd>
- <dt>GETVAL</dt>
- <dd> <var>semctl</var> returns the value of the semaphore with number
- <var>semnum</var>.
- </dd>
- <dt>GETZCNT</dt>
- <dd> <var>semctl</var> returns the number of processes waiting for
- semaphores that reach value zero.
- </dd>
- <dt>SETALL</dt>
- <dd> In this case, the <var>arr</var> field of <var>arg</var> should point
- to a memory area where the values of the semaphores will be retrieved from.
- The size of this memory area is \var{SizeOf(Word)* Number of semaphores
- in the set}.
- This call will then set the values of the semaphores from the memory array.
- </dd>
- <dt>SETVAL</dt>
- <dd> This will set the value of semaphore <var>semnum</var> to the value
- in the <var>val</var> field of the <var>arg</var> parameter.
- </dd>
- </dl>
- <p>
- The function returns -1 on error.
- </p>
- </descr>
- <errors>
- The function returns -1 on error, and <var>IPCerror</var> is set accordingly.
- </errors>
- <seealso>
- <link id="semget"/>
- <link id="semop"/>
- </seealso>
- <example file="ipcex/semtool"/>
- </element>
- <element name="shmget">
- <short>Return the ID of a shared memory block, possibly creating it</short>
- <descr>
- <p>
- <var>shmget</var> returns the ID of a shared memory block, described by <var>key</var>.
- Depending on the flags in <var>flag</var>, a new memory block is created.
- </p>
- <p>
- <var>flag</var> can have one or more of the following values (combined by ORs):
- </p>
- <dl>
- <dt>IPC_CREAT</dt>
- <dd> The queue is created if it doesn't already exist.
- </dd>
- <dt>IPC_EXCL</dt>
- <dd> If used in combination with <var>IPC_CREAT</var>, causes the
- call to fail if the queue already exists. It cannot be used by itself.
- </dd>
- </dl>
- <p>
- Optionally, the flags can be <var>OR</var>ed with a permission mode, which is the
- same mode that can be used in the file system.
- </p>
- <p>
- if a new memory block is created, then it will have size <var>Size</var>
- bytes in it.
- </p>
- </descr>
- <errors>
- On error, -1 is returned, and <var>IPCError</var> is set.
- </errors>
- <seealso>
- </seealso>
- </element>
- <element name="shmat">
- <short>Attach a shared memory block.</short>
- <descr>
- <p>
- <var>shmat</var> attaches a shared memory block with identified <var>shmid</var>
- to the current process. The function returns a pointer to the shared memory
- block.
- </p>
- <p>
- If <var>shmaddr</var> is <var>Nil</var>, then the system chooses a free unmapped
- memory region, as high up in memory space as possible.
- </p>
- <p>
- If <var>shmaddr</var> is non-nil, and <var>SHM_RND</var> is in <var>shmflg</var>, then
- the returned address is <var>shmaddr</var>, rounded down to <var>SHMLBA</var>.
- If <var>SHM_RND</var> is not specified, then <var>shmaddr</var> must be a
- page-aligned address.
- </p>
- <p>
- The parameter <var>shmflg</var> can be used to control the behaviour of the
- <var>shmat</var> call. It consists of a ORed combination of the following
- constants:
- </p>
- <dl>
- <dt>SHM_RND</dt> <dd> The suggested address in <var>shmaddr</var> is rounded down to
- <var>SHMLBA</var>.
- </dd>
- <dt>SHM_RDONLY</dt> <dd> the shared memory is attached for read access only.
- Otherwise the memory is attached for read-write. The process then needs
- read-write permissions to access the shared memory.
- </dd>
- </dl>
- <p>
- For an example, see <link id="shmctl"/>.
- </p>
- </descr>
- <errors>
- If an error occurs, -1 is returned, and <var>IPCerror</var> is set.
- </errors>
- <seealso>
- <link id="shmget"/>
- <link id="shmdt"/>
- <link id="shmctl"/>
- </seealso>
- </element>
- <element name="shmdt">
- <short>Detach shared memory block.</short>
- <descr>
- <p>
- <var>shmdt</var> detaches the shared memory at address <var>shmaddr</var>. This shared
- memory block is unavailable to the current process, until it is attached
- again by a call to <link id="shmat"/>.
- </p>
- <p>
- The function returns <var>True</var> if the memory block was detached
- successfully, <var>False</var> otherwise.
- </p>
- </descr>
- <errors>
- On error, False is returned, and IPCerror is set.
- </errors>
- <seealso>
- <link id="shmget"/>
- <link id="shmat"/>
- <link id="shmctl"/>
- </seealso>
- </element>
- <element name="shmctl">
- <short>Perform control operations on a shared memory block.</short>
- <descr>
- <p>
- <var>shmctl</var> performs various operations on the shared memory block
- identified by identifier <var>shmid</var>.
- </p>
- <p>
- The <var>buf</var> parameter points to a <var>TSHMid_ds</var> record. The
- <var>cmd</var> parameter is used to pass which operation is to be performed.
- It can have one of the following values :
- </p>
- <dl>
- <dt>IPC_STAT</dt><dd> <var>shmctl</var> fills the <var>TSHMid_ds</var> record that
- <var>buf</var> points to with the available information about the shared memory
- block.</dd>
- <dt>IPC_SET</dt><dd> applies the values in the <var>ipc_perm</var> record that
- <var>buf</var> points to, to the shared memory block.</dd>
- <dt>IPC_RMID</dt><dd> the shared memory block is destroyed (after all processes
- to which the block is attached, have detached from it).</dd>
- </dl>
- <p>
- If successful, the function returns <var>True</var>, <var>False</var> otherwise.
- </p>
- </descr>
- <errors>
- If an error occurs, the function returns <var>False</var>, and <var>IPCerror</var>
- is set.
- </errors>
- <seealso>
- <link id="shmget"/>
- <link id="shmat"/>
- <link id="shmdt"/>
- </seealso>
- <example file="ipcex/shmtool"/>
- </element>
- </module>
- </package>
- </fpdoc-descriptions>
|