int msgget(key_t key, int oflag);
int semget(key_t key, int nsems, int oflag);
int shmget(key_t key, size_t size, int oflag);
创建和打开一个IPC对象的三个get函数的第一个参数key是类型为key_t的IPC键,返回值identifier是一个整数标识符。
对于key值,有两种选择:
(1)调用ftok,给它传递pathname和id
(2)指定key为IPC_PRIVATE
所有三个get函数都有一个名为oflag的参数,它指定IPC对象的读写权限位(ipc_perm结构的mode成员),并选择创建一个新的IPC对象还是访问一个已存在的IPC对象。
2.设置oflag参数的IPC_CREAT位但不设置它的IPC_EXCL位时,如果所指定键的IPC对象不存在,那就创建一
1.指定key为IPC_PRIVATE能保证创建一个唯一的IPC对象。个新的对象,否则返回该对象。
3.同时设置oflag的IPC_CREAT和IPC_EXCL位时,如果所指定键的IPC对象不存在,那就创建一个新的对象,否则返回一个EEXIST错误,因为该对象已存在。
oflag参数
|
key不存在
|
key已存在
|
无参数
|
出错,errno=ENOENT
|
成功,引用已存在对象
|
IPC_CREAT
|
成功,创建新对象
|
成功,引用已存在对象
|
IPC_CREAT | IPC_EXCL
|
成功,创建新对象
|
错误,errno=EEXIST
|
阅读(1049) | 评论(0) | 转发(0) |