Все, я здесь, чтобы спросить вас Как я могу поделиться массивом семафоров между двумя процессами?? Поскольку я создал массив с semget(..)
, но я не могу использовать shmat(..)
на нем!Поделиться массивом Семафоры между двумя процессами | linux C
С разделом общей памяти я обычно использую shmget()
, а затем shmat(..)
, чтобы дочерний процесс мог получить к нему доступ. Но как это работает с массивом семафоров?
Я не могу найти какой-либо подобный метод, способный прикрепить() !!!
Здесь Пользуюсь semget()
создать массив из 5 семафоров:
/* allocate semaphores */
if ((semid = semget(IPC_PRIVATE,5,IPC_CREAT|0666)) == -1) {
printf("shmget() fallita sem id\n");
perror("semget()");
//releaseAll(bufferid,Tid,Did,semid);
exit(-4);
Вот в другом процессе, я пытаюсь прикрепить этот массив перед использованием его (но я использую шмат и, кажется, не работает ..)
sem_t* addr1;
if((addr1=(sem_t*)shmat(semid,NULL,0))==-1){
printf("shmat() fallita sem id\n");
perror("shmat() for content");
exit(-1);// +1 per \0 finale
}
Вам не нужна общая память. Просто не используйте 'IPC_PRIVATE', используйте реальный ключ, возвращенный' ftok' вместо этого в обоих процессах. См. [Здесь] (http://pubs.opengroup.org/onlinepubs/009695299/functions/semget.html). –