有没有办法检查返回的文件描述符是否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只有在创建对象后立即调用才不会失败。