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,没有允许父进程访问一个创建的内存的标志吗?