有没有办法检查由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);
但问题在于我总是会得到两次“共享大小:-1”的消息,只有在对象创建后立即调用ftruncate
才不会失败。
shm_open()
返回的内容上调用lssek()
。但是,如果从lseek()
获取到-1
,你可以添加一个调用perror()
的语句来获取有关失败的详细信息。 - alk