【发布时间】:2014-11-26 22:01:49
【问题描述】:
我正在尝试编写一个程序,它分叉一个服务器进程、n 个发布者进程、m 个订阅者进程,为每个发布者和订阅者进程创建一个管道,并监听每个管道上的信息。我做了一些工作,但我不太清楚我需要做什么才能使我编写的代码完整。
绝对错误的一件事是分叉的订阅者进程远不止 m 个。为什么会发生这种情况,我该如何解决?
任何建议将不胜感激!
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
int num_publishers = 0;
int num_subscribers = 0;
int main(int argc, char *argv[])
{
int pfds[2];
char buf[128];
num_publishers = atoi(argv[1]);
num_subscribers = atoi(argv[2]);
printf("%d publishers and %d subscribers.\n", num_publishers, num_subscribers);
pid_t pub_pids[num_publishers];
pid_t sub_pids[num_subscribers];
for (int i=0; i < num_publishers; i++)
{
pub_pids[i] = fork();
printf("Publisher: %d \n", pub_pids[i]);
}
printf("\n");
for (int i=0; i < num_subscribers; i++)
{
sub_pids[i] = fork();
printf("Subscriber: %d \n", sub_pids[i]);
}
printf("\n");
pipe(pfds);
if (!fork())
{
printf("CHILD: writing to the pipe\n");
write(pfds[1], );
printf("CHILD: exiting\n");
exit(0);
}
else
{
printf("PARENT: reading from pipe\n");
read(pfds[0], buf, 5);
printf("PARENT: read \"%s\"\n", buf);
wait(NULL);
}
return 0;
}
【问题讨论】:
标签: c process pipe fork publish-subscribe