Linux中的信号量错误-:无效参数错误号:22(EINVAL)
我试图在linux中执行一个C程序,我得到的错误是“p_信号量:无效参数错误号:22”,有人能帮忙吗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
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);