板友好
我在Linux上寫個 兩個 process ,存取一個 shared meemory
如果只宣告一個訊號量,兩個 process 有符合我預期的跑,但是宣告兩個一直出錯
semid = semget(ftok(".",'a'),2,(IPC_CREAT|0600)); //這邊回傳semid=0,0不知道
//有沒有成功
if(sem_init(semid, 0) == -1)
perror("Initialize semaphore\n"); //會跑到這邊: Bad address
else
printf("Semaphore has initialized\n");
int sem_init(int sem_id, int value){
union semun sem_union;
// sem_union.val = value;
if (semctl(sem_id, 0, SETALL, sem_union) == -1) {
return -1;
}
return 0;
}
請問我這出錯在哪邊呢? 照著網路上範例 semget也是這樣宣告..
謝謝。
ps:
後來我找到方法
sem_init(int sem_id, int value){
union semun sem_union;
unsigned short array = {0,0};
sem_union.array = array; //這樣就不會報錯 ..
if (semctl(sem_id, 0, SETALL, sem_union) == -1) {
return -1;
}
return 0;
}
但 semid 回傳 0 這樣是對的嗎?