OSX和共享内存需要sudo

时间:2014-03-03 17:50:08

标签: c macos shared-memory sudo

我最近在我们的服务器上更新OSX软件后发现我无法运行我的程序而没有获得Segmentation Fault 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

2 个答案:

答案 0 :(得分:2)

您没有正确设置共享内存的权限。您必须使用sys/stat.h中的宏来传递正确的权限。咨询man 2 chmod

shmid = shmget(IPC_PRIVATE, arrsize * sizeof(double), S_IRUSR | S_IWUSR );

会做的伎俩。

答案 1 :(得分:1)

作为普通用户运行时,shmget调用可能会失败,因为您的文字值666正在被解析为十进制文字。您需要一个前导0才能将其识别为八进制。