三种类型的IPC合称为"Posix IPC
":
Posix消息队列;
Posix信号量;
Posix共享内存区;
三种类型的Posix IPC都使用"Posix IPC名字
” 进行标识。mq_open、 sem_open和shm_open
这三个函数的第一个参数就是这样的一 个名字,它可能是某个文件系统中的一 个真正的路径名,也可能不是。
Posix.1描述Posix IPC名字的:
必须符合已有的路径名规则(必须最多由PATH_MAX个字节构成,包括结尾的空字节)。
若以斜杠符开头,那么对这些函数的不同调用将访问同 一 个队列。如果它不以斜杠符开头,那么效果取决于实现。
名字中额外的斜杠符的解释由实现定义。
由于移植性问题不能都兼容到,应该把Posix IPC名字的#define
行放在一个便于修改的头文件中,这样程序转移到另一个系统上,只需修改头文件。Posix.1定义了三个宏:
S_TYPEISMQ(buf);
S_TYPEISSEM(buf);
S_TYPEISSHM(buf);
个stat
结构的指针,其内容由fstat、lstat或stat
这三个函数填入。自定义px_ipc_name
函数解决移植性问题的方法,定位Posix IPC名字而添加上之前的前缀目录。
char *px_ipc_name(const char *name);
//name不能有任何斜杠符,例:
px_ipc_name("test");
函数原型:
char * px_ipc_name(const char *name)
{
char *dir, *dst, *slash;
if ( (dst = malloc(PATH_MAX)) == NULL)
return(NULL);
//可以使用环境变量覆盖默认目录
if ( (dir = getenv("PX_IPC_NAME")) == NULL) {
#ifdef POSIX_IPC_PREFIX
dir = POSIX_IPC_PREFIX; /* 来自“config.h”*/
<