我已经实现了一个pipe()
基于共享内存模拟系统调用的库。
现在,当我不使用任何代码fork()
(例如,不调用任何子进程)时,代码可以正常工作。
我的库需要使用任何给定 int main()
的程序,所以这里的基本问题是信号量的修改应该在库中进行,而不是在main
程序中进行。
图书馆 :
这是图书馆:
static int flag = FALSE;
static int mutex_init = 0;
static pthread_mutex_t lock;
#define BUFFER 4096
int my_new_finish()
{
return 1; // always successful
}
void error_out(const char *msg)
{
perror(msg);
exit(EXIT_FAILURE);
}
现在,当我不使用main
调用程序时,这个库可以正常工作fork()
。
但是,当我使用时fork()
,所有的地狱刹车都松了。
例如 :
#include <stdio.h>
#include <stdlib.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;
}
我的问题是:
如何在上述库中使用信号量,而我不“知道”
main()
我将获得的程序?我试图将信号量放入库中(而不是
main()
程序中),但效果不佳。你能解释一下我怎样才能正确地做到这一点吗?
评论 :
请注意,这
main
只是一个例子,我可以得到无数其他main
程序。这是作业
非常感激