代码之家  ›  专栏  ›  技术社区  ›  Wonter

shmat()权限被拒绝,即使我有读取权限

  •  2
  • Wonter  · 技术社区  · 7 年前

    在我的简单代码中:

    #include <sys/shm.h>
    #include <stdio.h>
    
    int main() {
        key_t key = ftok(".", 'b');
        int shmid = shmget(key, 4, IPC_CREAT | 0444);
        if (shmid == -1) {
            perror("shmget");
            return 1;
        }
    
        void* addr = shmat(shmid, NULL, 0);
        if (addr == (void*) -1) {
            perror("shmat");
            return 1;
        }
    
        printf("success");
        return 0;
    }
    

    我已经有阅读权限,但我得到了“shmat:权限被拒绝”。

    1 回复  |  直到 7 年前
        1
  •  3
  •   John Zwinck    7 年前

    从…起 man shmat

    如果 SHM_RDONLY 是在shmflg中指定的,该段被附加用于读取,并且该过程必须具有该段的读取权限。否则,将附加段进行读写,并且进程必须具有该段的读写权限。

    所以你需要使用 仅限SHM\u RDONLY 而不是 0 shmat()