1
我創建使用semget
如何使用了semctl設置第n個信號的值在信號燈設置
#define SEM_ID 250
...
sem_set_id = semget(SEM_ID, 1, IPC_CREAT | 0660);
if (sem_set_id == -1) {
perror("main: semget");
exit(1);
現在System V
信號按我的理解,這將創建一套信號燈其中有許多信號燈在裏面。 但如何識別特定的信號使用semctl
將其值設置...
int iter=0;
for(iter=0;iter<no_of_jobs;iter++)
{
int rc=semctl(semid,iter,SETVAL, sem_val);
if(rc==-1)
{printf("Error:semctl\n");
exit(1);
}
}
上面的代碼運行的iter=0
但沒有其他。在struct semun sem_val
中,我設置了值sem_val.val=1
;
當我更改1到10 semget給出錯誤.... –
行;它給了什麼錯誤?也許你的系統沒有配置爲允許更大的信號集。從2開始,看看它走多遠。內核的配置方式因系統而異;什麼和怎樣的細節非常非常多變。至少,您需要說明您正在使用哪種操作系統(例如Solaris,Mac OS X和Linux的答案完全不同)。 –
在Mac OS X上,一些相關參數是:'kern.sysv.semume = 10', 'kern.sysv.semmsl = 87381', 'kern.sysv.semmnu = 87381', 'kern.sysv .semmns = 87381', 'kern.sysv.semmni = 87381' - 並且命令它們是'sysctl'。 –