我在C中编写一个程序,它使用POSIX信号量来控制多个进程之间对共享内存的访问。我正在创建我的共享内存段,并在附件后我初始化信号量并检查其值只是为了确保一切顺利然后继续它并没有打印任何东西,但它没有给出错误所以我可能是附加共享内存段错误可能会转换(我怀疑这是因为sem_init和sem_getval工作,如果我在信号量的“本地”副本上使用它们)
my code looks like this
//header files we'll need
#include<sys/ipc.h>
#include<sys/shm.h>
#include<stdlib.h>
#include<stdio.h>
#include<semaphore.h>
//for fork
#include<unistd.h>
int val = 0;
int fullId = 0;
sem_t *full;
//set up shared mem for FULL semaphore
if ((fullId = shmget(fullSemKey, sizeof(sem_t), IPC_CREAT)) < 0){
perror("shmget");
return 1;
}
else
printf("shmid = %d\n", fullId);
//FULL
if((full = (sem_t*)shmat(fullId, NULL, 0)) < 0)
{
perror("shmget");
return 1;
}
else
printf("success in attaching\n", emptyId);
//initialize our semaphore
if(sem_init(full, 1, value) < 0)
{
perror("sem_init FAILED <full>");
exit(1);
}
sem_getvalue(full, &value);
printf("driver: value %d= \n", value);
UPDATE:发现答案man没有指定它在第一次不能正常工作后为sem设置共享内存因为信号量已经创建但没有取消链接和关闭