Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 修改共享内存中的结构_C_Queue_Shared Memory_Mmap - Fatal编程技术网

C 修改共享内存中的结构

C 修改共享内存中的结构,c,queue,shared-memory,mmap,C,Queue,Shared Memory,Mmap,我正在尝试在共享内存中创建一个基于指针的队列 这是我的排队函数 void enqueue(queue *q, int k) { _queueNode *temp = mmap(NULL, sizeof(_queueNode), PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0); temp->key = k; temp->next = NULL; if (q->

我正在尝试在共享内存中创建一个基于指针的队列

这是我的排队函数

void enqueue(queue *q, int k) {   
    _queueNode *temp = mmap(NULL, sizeof(_queueNode), PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0);
    temp->key = k;
    temp->next = NULL;  
    
    if (q->rear == NULL) { 
        q->front = q->rear = temp;
    }
    else {
        q->rear->next = temp; 
        q->rear = temp;
    }

    q->length++;
}
_队列节点结构

typedef struct queueNode { 
    int key; 
    struct queueNode *next; 
} _queueNode; 
在父进程中排队都可以正常工作,但当我在子进程中排队时只对它起作用,并且在读取父进程中的更改时出现分段错误。 我的主要爱好是这样的

queue *q = newqueue();
enqueue(q, 1);
enqueue(q, 2);
enqueue(q, 3);

if (fork() == 0) {
    enqueue(q, 4);
    printf("child: ");
}
else {
    wait(NULL);
    printf("parent: ");
}
printqueue(q);
我得到了这个输出

child: [4, 3, 2, 1]
Segmentation fault (core dumped)

MAP_SHARED | MAP_ANONYMOUS
表示内存与当前进程的子进程共享。父进程无法访问该内存,它只是没有映射到父进程。你可能想考虑。@某个程序员,HMM,没有允许父进程访问一个创建的内存的标志吗?