【发布时间】:2013-02-03 13:48:05
【问题描述】:
你知道为什么这段 C 代码以“分段错误”结尾吗?
#include <semaphore.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#define NAMESEM "/mysem"
int main(int argc, char* argv) {
sem_t* sem;
int fd = shm_open(NAMESEM, O_RDWR|O_CREAT|O_EXCL|O_TRUNC, 0);
ftruncate(fd, sizeof(sem_t));
sem = mmap(NULL, sizeof(sem_t), PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
sem_init(sem, 1, 0);
sem_wait(sem);
return 0;
}
我已关注此处找到的所有与此相关的帖子,但似乎 sem_init() 会产生分段错误,我不知道为什么。我在指针上犯了一些错误吗?
【问题讨论】:
-
你检查
mmap的返回值了吗? -
好的,非常感谢!我已经解决了这个福斯特问题。但是现在第二个进程执行 shm_open 时,我收到错误“权限被拒绝”。进程 A 执行 shm_open(NAMESEM, O_RDWR|O_CREAT|O_TRUNC, O_RDWR);而进程 B 执行 shm_open(NAMESEM, O_RDWR, O_RDWR);...是否有权限错误?
标签: c shared-memory semaphore mmap