Sem_open导致非法搜索错误

时间:2012-05-02 08:05:35

标签: c semaphore

我正在努力解决readers-writers problem。以下函数应该创建命名信号量。

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

1 个答案:

答案 0 :(得分:0)

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