2015-11-09 95 views
0

我想在Linux中執行一個C程序,並且出現錯誤信息:「P_Semaphore:無效參數錯誤號:22,」有人可以幫助Linux中的信號量錯誤 - :無效的參數錯誤否:22(EINVAL)

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"); 
} 

回答

0

據對執行semop手冊(2)

EINVAL The semaphore set doesn't exist, or semid is less than zero, 
      or nsops has a nonpositive value. 

所以你的情況,nsops爲零(非陽性)。它應該是一個。

這是調用的第三個參數:

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

我查了一下,信號燈設置存在,也正值 – Yogarajan

+0

nsops是對semop調用的第三個參數。它是零,它應該是1. – rghome

+0

不,它不是我檢查的問題,我得到了printf語句中的錯誤「printf(」%s(%d):錯誤信號量試圖%d,errno =%d \ n 「,M_HEADER,i_sem_id,errno);」 – Yogarajan