我正在尝试解决读者-作者问题。以下函数应该创建命名信号量。
void createSems(void){
if((sem_counter = sem_open("counter", O_CREAT, 0660, 1)) == SEM_FAILED)
printErrorAndKill("sem_open_counter");
if((sem_reader = sem_open("reader", O_CREAT, 0660, 1)) == SEM_FAILED)
printErrorAndKill("sem_open_reader");
if((sem_writer = sem_open("writer", O_CREAT, 0660, 1)) == SEM_FAILED)
printErrorAndKill("sem_open_writer");
if((sem_writer = sem_open("mutex1", O_CREAT, 0660, 1)) == SEM_FAILED)
printErrorAndKill("mutex1");
if((sem_writer = sem_open("mutex2", O_CREAT, 0660, 1)) == SEM_FAILED)
printErrorAndKill("mutex2");
if((sem_writer = sem_open("mutex3", O_CREAT, 0660, 1)) == SEM_FAILED)
printErrorAndKill("mutex3");
}
void printErrorAndKill (const char *functionName){
perror(functionName);
printf("%s: %s\n",functionName, strerror(errno));
exit(1);
}
在我的 MBP 10.7.3 上一切正常。但是当我在学校服务器上测试它时,我得到以下输出。
sem_open_reader: Permission denied
sem_open_reader: Illegal seek
每次都成功创建第一个信号量。我试图用谷歌搜索错误,但没有成功或与 sem_open 有任何联系。
我的问题是当我创建信号量时我做错了什么还是问题出在其他地方?
更新
我做了更多的测试,最终发现这与非法搜索无关。我去掉了“perror(functionName);”这一行 只是为了发现问题只是权限问题。我们学校的操作系统上保留了一些名称,所以我只需要提供一些更相关的名称。