Linux中的信号量错误-:无效参数错误号:22(EINVAL)

Linux中的信号量错误-:无效参数错误号:22(EINVAL),linux,semaphore,Linux,Semaphore,我试图在linux中执行一个C程序,我得到的错误是“p_信号量:无效参数错误号:22”,有人能帮忙吗 Int P_Semaphore(int i_sem_id) { int i_code_returns; struct sembuf t_semop; #ifdef TRACE Debug(N_DEBUG_8, "P_Semaphore", "Entree, i_sem_id=%d<<<<<<\n", i_sem_id); #endif t_semo

我试图在linux中执行一个C程序,我得到的错误是“p_信号量:无效参数错误号:22”,有人能帮忙吗

Int P_Semaphore(int i_sem_id)
{
 int i_code_returns;
 struct sembuf t_semop;
 #ifdef TRACE
 Debug(N_DEBUG_8, "P_Semaphore", "Entree, i_sem_id=%d<<<<<<\n", i_sem_id);
 #endif
 t_semop.sem_num = 0;
 t_semop.sem_op  = -1;
 t_semop.sem_flg = 0;
 do
 {
   i_code_retour = semop(i_sem_id, &t_semop, 0);

 } while ((i_code_returns == KO) && (errno == EINTR));

 if (i_code_retour == KO)
 {
   printf( "%s(%d):Error semaphore making attempt %d,errno = %d\n", M_HEADER, i_sem_id, errno);
  perror("P_Semaphore");
 }
Int P_信号量(Int i_sem_id)
{
int i_代码_返回;
结构sembuf t_semop;
#ifdef跟踪

调试(N_Debug_8,“P_信号量”,“主菜,i_sem_id=%d

根据semop(2)上的手册)

所以在你的例子中,
nsops
是零(非正)。它应该是一

这是调用的第三个参数:

int semop(int semid, struct sembuf *sops, size_t nsops);

我检查了,信号量集存在,并且具有正值。操作是semop调用的第三个参数。它为零,应该为1。否这不是我检查的问题,我在printf语句“printf”(%s(%d):错误信号量尝试%d,errno=%d\n),M\u头,I\u sem\u id,errno)中遇到错误;“请再次查看。semop调用中的第三个参数是错误的。当正确识别代码中的问题时,您应该向上投票并接受答案。然后,其他有相同问题的人也可以从您的问题中受益,您可以在此过程中获得声誉积分。”。
int semop(int semid, struct sembuf *sops, size_t nsops);