命令semctl總是返回-1(在控制檯中返回「Fail2」)。我究竟做錯了什麼?C中用於共享內存的信號量無法初始化
union semun{
int val;
struct semid_ds *buf;
unsigned short int *array;
struct seminfo *__buf;
} forsem;
forsem.val = 0;
int sem;
if((sem= semget(key, 1, 0666 | IPC_CREAT) == -1)) {
fprintf(stderr, "Fail1");
}
if (semctl(sem, 0, SETVAL, forsem) == -1) {
fprintf(stderr, "Fail2");
}
errno的寫入Invalid argument
當像semctl這樣的系統調用返回-1時, ['errno'](http://man7.org/linux/man-pages/man3/errno.3.html)出了什麼問題。您可以使用['strerror']獲取可打印的字符串(http://man7.org/linux/man-pages/man3/strerror.3.html)。 –
我沒有和errno一起工作太多。我應該寫什麼來獲取錯誤形式'semctl'? E:我明白了。它給出''無效參數'' – SRewip
包含頭文件'errno.h'並檢查變量'errno'以找出錯誤代碼。 更多細節在這裏:http://www.cs.utah.edu/dept/old/texinfo/glibc-manual-0.02/library_2.html 一旦你有了它,請檢查錯誤代碼的含義:http:// man7 .ORG/LINUX /人-頁/男2/semctl.2.html – Sinstein