gpt4 book ai didi

linux - 第二个 shm_open() 因 ENOENT 而失败

转载 作者:太空宇宙 更新时间:2023-11-04 10:36:54 30 4
gpt4 key购买 nike

mode_t mode = S_IRWXU | S_IRWXG | S_IRWXO;
shm_fd = shm_open("/ipc_shm", O_CREAT | O_RDWR, mode);

这有效,shm_fd 返回 4。同样的进程然后调用一个库函数,该库函数也调用

fd = shm_open("/ipc_shm", O_RDWR, 0);

这个失败,errno 设置为 2,即 ENOENT(没有这样的文件或目录)。中间没有调用 shm_unlink 。知道为什么第二次通话失败。感谢您的帮助。

最佳答案

我的测试.c:

#include <sys/mman.h>
#include <sys/stat.h> /* For mode constants */
#include <fcntl.h> /* For O_* constants */

int main (int argc, char *argv[])
{
mode_t mode = S_IRWXU | S_IRWXG | S_IRWXO;
int shm_fd = shm_open("/ipc_shm", O_CREAT | O_RDWR, mode);
int fd = shm_open("/ipc_shm", O_RDWR, 0);

return 0;
}

使用 gcc test.c -Wall -lrt 编译后按预期工作:

$strace ./a.out 
....
statfs("/dev/shm/", {f_type=0x1021994, f_bsize=4096, f_blocks=22290, f_bfree=22290, f_bavail=22290, f_files=55725, f_ffree=55723, f_fsid={0, 0}, f_namelen=255, f_frsize=4096}) = 0
futex(0xb6f5d1c0, FUTEX_WAKE_PRIVATE, 2147483647) = 0
open("/dev/shm/ipc_shm", O_RDWR|O_CREAT|O_NOFOLLOW|O_CLOEXEC, 0777) = 3
fcntl64(3, F_GETFD) = 0x1 (flags FD_CLOEXEC)
open("/dev/shm/ipc_shm", O_RDWR|O_NOFOLLOW|O_CLOEXEC) = 4
exit_group(0)

请在您的应用程序上运行 strace,并搜索所有出现的 ipc,也许还有 chroot()。也许某些东西取消了文件链接?

关于linux - 第二个 shm_open() 因 ENOENT 而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36938358/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com