我最近发现在更新我们服务器上的 OSX 软件后,我无法在没有出现段错误 11 的情况下运行我的程序之一。这是一个简单的程序,它尝试分配共享内存,然后释放它。当我使用 sudo 编译并运行我的文件时,它工作正常。任何帮助将不胜感激!
源代码:
#include <stdlib.h>
#include <stdio.h>
#include <sys/shm.h>
#include <sys/ipc.h>
#include <sys/types.h>
#include <stddef.h>
#include <sys/un.h>
#include <unistd.h>
int main(){
double *shared;
int arrsize, shmid;
arrsize = 10;
shmid = shmget(IPC_PRIVATE, arrsize * sizeof(double), IPC_CREAT | 666);
shared = (double*) shmat(shmid, NULL, 0);
shared[2] = 3.0; //source of Segmentation Fault
shmdt( (void*) shared );
shmctl(shmid, IPC_RMID, NULL);
printf("Success!");
return 0;
}
系统:
ProductName: Mac OS X
ProductVersion: 10.9.1
BuildVersion: 13B42
最佳答案
您没有正确设置共享内存的权限。您必须使用 sys/stat.h 中的宏来传递正确的权限。请参阅man 2 chmod
:
shmid = shmget(IPC_PRIVATE, arrsize * sizeof(double), S_IRUSR | S_IWUSR );
会成功的。
关于c - OSX 和共享内存需要 sudo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22153716/