UNIX环境高级编程:进程管理和通信
参数: shmflg:标志位, 同open函数的权限位,也可以用8进制表示法。 用法: 0666 打开一个共享内存,不能创建。如果与key关联的不存在,会返回-1。 0666|IPC_CREAT 不存在就创建,存在就打开 有时需初始化,创建后要初始化0666|IPC_CREAT|IPC_EXCL 返回-1,并设置相应errno。 errno=EEXIST表示已存在。 例: int shmid; if( (shmid = shmget(key, 128, 0666|IPC_CREAT|IPC_EXCL)) < 0) { if(errno == EEXIST) { shmid = shmget(key, 128, 0666)} //已经存在的情况,打开就可以。 返回值 成功:共享内存段标识符 出错:-1 映射 共享内存 void *shmat( int shmid, // 要映射的共享内存区标识符 const void *shmaddr, // 将共享内存映射到指定地址(若为NULL,则表示由系统自动完成映射) int shmflg ); 参数: shmflg: SHM_RDONLY:共享内存只读 默认0:共享内存可读写 返回值 成功:映射后的地址; 出错:-1。 撤销共享内存映射 int shmdt( const void *shmaddr //共享内存映射后的地址 ); 返回值: 成功:0, 失败:返回-1 删除共享内存对象 int shmctl( int shmid, //要操作的共享内存标识符 int cmd, struct shmid_ds *buf // 指定IPC_STAT/IPC_SET时用以保存/设置属性 ); 参数: cmd : IPC_STAT (获取对象属性) IPC_SET (设置对象属性) IPC_RMID (删除对象) 返回值: 成功:0, 失败:返回-1 消息队列(Message queue) 消息队列的操作包括创建或打开消息队列、添加消息、读取消息和控制消息队列。 可看成是多个FIFO的集合,消息类型. 消息队列随内核持续,除内核重启或人工删除。 消息队列对应唯一的键值 消息结构体 struct msgbuf { long mtype; //消息类型 char mtext[N] //消息正文 }; #define LEN (sizeof(MSG)- sizeof(long)) <sys/types.h> <sys/ipc.h> <sys/msg.h> (编辑:云计算网_泰州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |