我試圖讓這段代碼工作,但我不能。我設法創造一些代碼,不顯示任何編譯錯誤或警告,但是當我嘗試執行它失敗,此錯誤:semget沒有這樣的文件或目錄
了semget:沒有這樣的文件或目錄
這是我的代碼:
#include <stdio.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/sem.h>
#include <time.h>
int main(int argc, char *argv[]) {
key_t llave1,llavesem;
int idmem,idsem;
struct sembuf op;
llavesem=ftok("/tmp",'b');
idsem=semget(llavesem,1,0); /* This is the line giving the error*/
if (idsem==-1) {
perror ("semget");
return 1;
}
semctl(idsem,1,SETVAL, &valini);
op.sem_num=0;
op.sem_flg=0;
/*Some code here*/
op.sem_op=-1;
semop(idsem,&op,1);
/*Some code here*/
op.sem_op=1;
semop(idsem,&op,1);
semctl(idsem,1,IPC_RMID);
}
如果我包含頭文件sys/sem.h ...爲什麼可執行文件找不到它?
我在做什麼錯了?
提前感謝和問候,
** * ** * ** * ** * ** 編輯 ** * ** * ** * ** * ****
給出之後,我創建的文件,這樣做,我添加這個問題的答案包括:
#include <fcntl.h>
我的ftok句話前加上這兩條線:
llave1=open("/tmp/a",O_RDWR|O_CREAT,0644);
llavesem=open("/tmp/b",O_RDWR|O_CREAT,0644);
文件被創建,但我仍然有相同的錯誤。
[email protected]/: ls -l /tmp/a
-rw-r--r-- 1 ubuntu ubuntu 0 Sep 11 00:11 /tmp/a
[email protected]/: ls -l /tmp/b
-rw-r--r-- 1 ubuntu ubuntu 0 Sep 11 00:11 /tmp/b
任何想法?
謝謝!
太棒了!我改變了這一行: idsem = semget(llavesem,1,IPC_CREAT); 而不是「0」我把「IPC_CREAT」,它的工作原理! \t 現在我面臨「核心轉儲」失敗:-D – user1660559
我有複製並將附加IPC_CREAT標記的代碼粘貼到測試文件中,它似乎運行時沒有任何錯誤。你能否驗證原始問題中的代碼仍然準確並且會產生錯誤?還有什麼是valini?它沒有在你發佈的代碼中定義,所以我把它做成了一個簡單的int。 –