我已经实现了一个模拟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
程序。这是功课
非常感谢
我想你的建议,但是'HELLO-world'在'main'仍然没有显示在控制台(意为标准输出)。请参阅修改后的帖子 – ron 2012-07-19 08:56:29
这将不会在fork()时共享互斥锁。 – nos 2012-07-19 09:04:31
@nos:任何方式呢?我怎样才能使用'fork()'工作?谢谢 – ron 2012-07-19 09:08:35