嘗試打開信號量時,sem_open失敗。 errno是22(),該錯誤描述爲「無效參數」。我已經檢查了名稱的格式(我認爲是正確的)以及標誌(O_CREAT和O_EXCL似乎很難搞亂,我沒有看到什麼?)OSX信號量:sem_open中的參數無效
平臺是OS X 10.7。I寧願使用一個無名信號量,但OS doesn't support sem_init。
int name_counter = 0;
// In order to create a unique semaphore, we iterate until we find a name that
// does not already exist.
do {
char name[48] = {0};
sprintf(name, "xyz_sem_%d", name_counter++);
job_semaphore = sem_open(name, O_CREAT | O_EXCL, S_IWUSR | S_IRUSR | S_IRGRP | S_IROTH, 0);
} while(errno == EEXIST);
if(0 != errno)
perror("Error opening xyz semaphore");
assert(0 == errno);
我都試過
sem_open(name, O_CREAT | O_EXCL);
和
sem_open(name, O_CREAT | O_EXCL, S_IWUSR | S_IRUSR | S_IRGRP | S_IROTH, 0);
打開信號量,但每個都得到相同的結果。我錯過了什麼?
編輯:上面的版本只有兩個參數是錯誤的 - 手冊頁說,包括O_CREAT時,您必須提供所有4個參數。
EDIT2:errno僅在函數返回錯誤代碼時有效。在這種情況下,我應該只在sem_open返回SEM_FAILED時才查看errno。我沒有這樣做,並且在完美的信號量返回時正在檢查errno。問題解決了。
@leebaker:你有沒有找到解決你的問題? – Robin 2013-03-19 04:59:38