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'。 –