C Sem_open导致非法寻道错误

C Sem_open导致非法寻道错误,c,semaphore,C,Semaphore,我正在努力解决这个问题。以下函数用于创建命名信号量 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) printErrorA

我正在努力解决这个问题。以下函数用于创建命名信号量

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);”一行,只是为了发现问题只是权限问题。我们学校的操作系统上保留了一些名称,因此我只需提供一些更相关的名称。

此“非法搜索”消息可能是由perror()引起的。我的系统上perror的手册页说:“请注意,在成功的库调用之后,errno是未定义的:此调用可能会更改此变量,即使它成功,例如,因为它在内部使用了一些其他库函数,但失败了。”

为什么会出现2个“sem\u open\u reader”错误,而“sem\u open\u reader”只出现一次?这是什么操作系统?检查printErrorAndKill函数,它会打印哪个函数失败以及失败原因,然后打印原因。这样做不对吗?啊,我没看到你打印两次。你在用什么操作系统?你的学校呢?你在学校有什么操作系统?现在我注释掉了这行“perror(functionName);”并且它只打印了sem_open_reader:权限被拒绝。所以我想问题出在别的地方。有没有办法检查我被拒绝许可的原因?