System V IPC & POSIX IPC(一):消息队列
消息队列允许进程之间以消息的形式交换数据,是一种常见的进程之间的通信机制。
1. 消息队列的创建
System V IPC:
int msgget(key_t key, int msgflg);
返回值:message queue identifier on success, or -1 error
参数key:key一般是通过ftok()返回的一个键或者IPC_PRIVATE,IPC_PRIVATE产生的唯一的key在fork调用的父子进程之间比较有用。
参数msgflg:msgflg可取的值有IPC_CREAT、IPC_EXCL,分别表示新建队列、如果同时指定了IPC_CREAT并且指定的key对应的队列已经存在,那么调用就会失败。
POSIX IPC:
mqd_t mq_open(const char *name, int oflag,
/* mode_t mode, struct mq_attr attr/);
返回值:message queue descriptor on success, or (mqd_t)-1 on error
参数name:name参数标示出了消息队列,一个可以移植的name命名方式是使用以斜线打头后面跟着一个或多个非斜线字符的名字,如:/mq-msg。
参数oflag:它控制着mq_open()操作的各个方面,可以包含的值O_CREAT、O_EXCL(跟前面msgget中介绍的同样的意义)、O_RDONLY、O_WRONLY、O_RDWR(控制着进程在消息队列上面的访问方式,跟文件打开系统调用open同样的取值和意义)、O_NONBLOCK(以非阻塞模式打开)。
参数mode:mode是一个位掩码,指定了新消息队列的权限。跟文件打开系统调用open同样的取值和意义。
参数attr:是一个mq_attr结构,指定了新消息队列的特性,后面再详细介绍。
从上面的创建过程来看POSIX IPC的消