shm_open()因EINVAL而失败

时间:2016-04-28 22:27:47

标签: shared-memory

IPC_SHM_FD = shm_open("/dev/ipc", O_CREAT | O_RDWR, S_IRUSR | S_IWUSR);

上述内容以EINVAL(有或没有O_CREAT)失败。文件/dev/ipc存在。

%ls -la
crwxrwxrwx 1 root root 251, 0 Apr 25 15:30 /dev/ipc

gdb输出:

Breakpoint 1, ipc_mem_init (min_blk_shift=7) at ipcd.c:335
335         IPC_SHM_FD = shm_open("/dev/ipc", O_CREAT | O_RDWR, S_IRUSR | S_IWUSR);
(gdb) n
336         if (IPC_SHM_FD == -1) {
(gdb) n
337             perror("shm_open: ");
(gdb) p errno
$1 = 22
(gdb)

这里有什么不妥?

1 个答案:

答案 0 :(得分:0)

引用shm_open(3):

  

对于便携式使用,共享内存对象应使用/ somename形式的名称标识;也就是说,一个以空字符结尾的字符串,最多包含NAME_MAX(即255个)字符,包含一个初始斜杠,后跟一个或多个字符,没有一个是斜杠

选择其他名称。