2012-12-16 72 views
2
arg.val = 1; 

    if (sem_id = semget(IPC_PRIVATE, 1, 0600 | IPC_CREAT) == -1){ 
      perror("Creating semaphore failed"); 
      exit(1); 
    } 
    else { 
      printf("Creating a semaphore with ID: %d \n",sem_id); 
      if (semctl(sem_id, 0, SETVAL, arg) == -1) {      
        perror("Initialization of semaphore failed\n"); 
        exit(1); 
      } 
    } 

我試圖創建和初始化一個信號,當我編譯我的程序,它返回我:
「旗語的初始化失敗 :標識符刪除信號初始化

你能解釋一下我的之所以出現這種情況?

+1

您在if語句中缺少右括號。 –

+0

我只是忘記了!對不起!你能注意到別的東西錯了嗎? – marymary

回答

1
if (sem_id = semget(IPC_PRIVATE, 1, 0600 | IPC_CREAT) == -1) 

解析(因爲==結合強於=

if (sem_id = (semget(IPC_PRIVATE, 1, 0600 | IPC_CREAT) == -1)) 

你可能想

if ((sem_id = semget(IPC_PRIVATE, 1, 0600 | IPC_CREAT)) == -1) 
+1

謝謝sooooo多!!! – marymary

1

操作==比操作的優先級高=。我相信這意味着這意味着sem_id被設置爲一個真正的值。您應該在if語句中對操作進行分組。

if((sem_id = semget(IPC_PRIVATE, 1, 0600 | IPC_CREAT)) == -1){