小编wes*_*mek的帖子

检查 POSIX 共享内存对象大小

有没有办法检查返回的文件描述符是否shm_open已由当前进程创建或较早存在?另外,这样做之后有什么方法可以检查它的大小吗?

这就是我现在所拥有的:

if ((fd = shm_open(SHARED_OBJ_NAME, O_RDWR|O_CREAT, 0777)) == -1)
    die(1, "Failed to open shared object");

fd_size = lseek(fd, 0, SEEK_END);

printf("Shared size: %ld\n", fd_size);

if (fd_size == -1 || fd_size < SHARED_OBJ_SIZE) {
    if (ftruncate(fd, 255) == -1)
        printf("ftruncate failed\n");
    fd_size = lseek(fd, 0, SEEK_END);
}

printf("Shared size: %ld\n", fd_size);
Run Code Online (Sandbox Code Playgroud)

但问题是我总是得到“共享大小:-1”两次,并且ftruncate只有在创建对象后立即调用才不会失败。

c posix shared-memory

5
推荐指数
1
解决办法
2854
查看次数

标签 统计

c ×1

posix ×1

shared-memory ×1