c - OSX 和共享内存需要 sudo

标签 c macos shared-memory sudo

我最近发现在更新我们服务器上的 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/

相关文章:

c - 为什么指向结构的指针会使程序崩溃?

macos - ruby 运动 : SecKeychainFindGenericPassword & Can't find pointer description for type '^'

c - 如何将字符串复制到 C 中的数组?

c - 查找文件是目录还是文件

objective-c - 在没有 NSAutoReleasePool 的情况下使用 autoReleased 对象?

java - 如何在处理中使用 libfreenect java 包装器

python - 使我的 NumPy 数组跨进程共享

python - Dask.delayed 不在类内进行 .compute()

c++ - Boost Shared Memory - 指针的返回 vector

c - 如何在带有 C 的 Linux 中使用伪终端?