我有一个全局静态变量,它是一个信号量,因为我正在编写一个库而不是一个程序。
在main()
使用该库的程序中fork()
,基于共享内存,对管道进行调用、读取和写入/写入。
例如,这是main()
使用我的库:
#include <stdio.h>
#include <stdlib.h>
#include "my_pipe_shared_memory_based.h"
int main()
{
int spd, pid, rb;
char buff[4096];
my_new_init();
if (my_new_fifo("tmp_shm_pipe",0666) < 0)
{
perror("my_new_fifo");
exit(1);
}
if (fork())
{
spd = my_new_open("tmp_shm_pipe", O_RDONLY, 0600);
if (spd < 0)
{
perror("PARENT: my_new_open");
exit(1);
}
rb = my_new_read(spd, buff, sizeof(buff));
if (rb > 0)
write(1, buff, rb);
}
else
{
spd = my_new_open("tmp_shm_pipe", O_WRONLY, 0600);
if (spd < 0)
{
perror("SON: my_new_open");
exit(1);
}
my_new_write(spd, "hello world!\n", sizeof("hello world!\n"));
}
my_new_close(spd);
my_new_un_link("tmp_shm_pipe");
my_new_finish();
return 0;
}
现在,我想在每次进程读取和/或写入方法之前使用信号量:
我的新写()
my_new_read()
my_new_write
现在,问题是,我怎样才能在上面请求的方法(例如& )中每次检查信号量的状态my_new_read
,所以我可以让进程做他的事情,或者阻止它,如果另一个进程当前正在读/写?
谢谢