IPC(5) | Linux Programmer's Manual | IPC(5) |
ipc - System V 進程間通信機制
# include <sys/types.h> # include <sys/ipc.h> # include <sys/msg.h> # include <sys/sem.h> # include <sys/shm.h>
本手冊頁涉及 System V 進程間通信機制在 Linux 下的實現: 消息隊列, 信號燈集合, 以及共享內存段. 下面提到 資源 時, 就是指上面這些通信機制中的一種.
對每個資源, 系統用一個共有的 struct ipc_perm 結構來存放權限信息, 以確定一個 ipc 操作是否可訪問該資源. 在 <sys/ipc.h> 中定義了 ipc_perm, 其成員如下:
ushort cuid; /* 創建者 uid */
ushort cgid; /* 創建者 gid */
ushort uid; /* 所有者 uid */
ushort gid; /* 所有者 gid */
ushort mode; /* 讀/寫權限 */
結構 ipc_perm 的成員 mode 的低九位定義了對該資源的訪問許 可, 以確定一個執行了 ipc 系統調用的進程能否訪問該資源. 其解 釋如下:
0400 用戶可讀. 0200 用戶可寫. 0040 組成員可讀. 0020 組成員可寫. 0004 其他用戶可讀. 0002 其他用戶可寫.
系統沒有使用執行位 0100, 0010 和 0001. 另外, 這裏的 "可寫" 等 效於信號燈集合裏的 "可更改".
在 <sys/ipc.h> 系統頭文件裏還定義瞭如下符號常數:
請注意 IPC_PRIVATE 是一個 key_t 類型, 而別的符號常數都是標誌域,它們的可以或( OR )在一起形成 int 類型.
消息隊列由正整數 (它的 msqid) 唯一標識, 其結構體 struct msquid_ds 在 <sys/msg.h> 中定義, 包含如下成員:
struct ipc_perm msg_perm;
ushort msg_qnum; /*
隊列中消息數目 */
ushort msg_qbytes; /*
一條隊列最大字節數 */
ushort msg_lspid; /* 上一次 msgsnd
調用的 pid */
ushort msg_lrpid; /* 上一次 msgrcv
調用的 pid */
time_t msg_stime; /* 上一次 msgsnd
的時間 */
time_t msg_rtime; /* 上一次 msgrcv
的時間 */
time_t msg_ctime; /*
上一次修改時間 */
信號燈集合由正整數 (它的 semid) 唯一標識, 並有一個與之關聯的結構體 struct semid_ds 它在 <sys/sem.h> 中定義, 包含如下成員:
struct ipc_perm sem_perm;
time_t sem_otime; /*
上一次操作的時間 */
time_t sem_ctime; /*
上一次修改的時間 */
ushort sem_nsems; /*
集合中信號燈數目 */
一個信號燈就是一個 struct sem 結構, 包含如下成員:
ushort semval; /* 信號燈值 */
short sempid; /*
上一次操作的進程的 pid
*/
ushort semncnt; /* 等待增加 semval
值的進程數目 */
ushort semzcnt; /* 等待 semval = 0
的進程數目 */
共享內存段由正整數 (它的 shmid) 唯一標識, 有一個關聯的結構類型 struct shmid_ds 在 <sys/shm.h> 中定義, 包含如下成員:
struct ipc_perm shm_perm;
int shm_segsz; /* 段尺寸 */
ushort shm_cpid; /* 創建者 pid */
ushort shm_lpid; /*
上一次操作的進程的 pid
*/
short shm_nattch; /*
目前附着的進程數目 */
time_t shm_atime; /*
上一次附着的時間 */
time_t shm_dtime; /*
上一次脫離的時間 */
time_t shm_ctime; /*
上一次修改的時間 */
ftok(3), msgctl(2), msgget(2), msgrcv(2), msgsnd(2), semctl(2), semget(2), semop(2), shmat(2), shmctl(2), shmget(2), shmdt(2).
name <email>
2001/02/02
http://cmpp.linuxforum.net
本頁面中文版由中文
man 手冊頁計劃提供。
中文 man
手冊頁計劃:https://github.com/man-pages-zh/manpages-zh
November 1, 1993 | Linux 0.99.13 |