+-

我想创建一个共享内存对象并将其截断为特定大小.
SHMSIZE定义为512
MODE使用S_IRUSR |设置S_IWUSR | S_IWGRP | S_IRGRP | S_IWOTH | S_IROTH
这是我的代码
char *shm_name = "SharedMemory";
int fd;
/* Open an Shared Memory Object for Read-/Write-Access */
if((fd = shm_open(shm_name, O_RDWR | O_CREAT, MODE) < 0)) {
perror("\nshm_open() in Caretaker failed");
exit(EXIT_FAILURE);
}
/* Truncate Shared Memory Object to specific size */
if((ftruncate(fd, SHMSIZE) < 0)) {
perror("\nftruncate() in Caretaker failed");
exit(EXIT_FAILURE);
}
调试时我看到shm_open()的返回值每次为0,但我可以在/ dev / shm中看到这个对象.并且在执行ftruncate()时,它每次都返回错误“invalid argument”.
为什么fd每次都为0,为什么ftruncate不起作用?
我该怎么办?
最佳答案
此声明中的操作顺序是不可靠的:
if((fd = shm_open(shm_name, O_RDWR | O_CREAT, MODE) < 0)) {
你正在分配shm_open(…)
if((fd = shm_open(shm_name, O_RDWR | O_CREAT, MODE)) < 0) {
^^^
点击查看更多相关文章
转载注明原文:共享内存编程中的shm_open和ftruncate() - 乐贴网