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)
这里有什么不妥?
答案 0 :(得分:0)
引用shm_open
(3):
对于便携式使用,共享内存对象应使用/ somename形式的名称标识;也就是说,一个以空字符结尾的字符串,最多包含NAME_MAX(即255个)字符,包含一个初始斜杠,后跟一个或多个字符,没有一个是斜杠。
选择其他名称。