我不敢肯定,我甚至会在这里打上正确的树。
我试图把我的父母过程的数据传给所有儿童。 该系统是一个简单的服务器方案,基本上将保存一个连接客户名单,然后向每个客户发送连接客户的路径表。 这最终将包含关于每个客户的信息内容......但现在我只想从父母那里获得同样的信息。
在母体程序中,首先,我建立了我的管道,将其放开(如管道中没有任何新数据)。 在与客户建立联系后,条目数目变数增加,以反映这一新联系。 然后,我把儿童进程推向新的功能,并更新我的管道,新目录编号(目前我有10个管道,看我是否需要为每个儿童单独设置一个管道)。
pid_t pid;
int numchildren;
int i, n;
/* Create the pipes. */
for(i = 0; i < 10; i++)
{
if (pipe (mypipe[i]))
{
fprintf (stderr, "Pipe failed.
");
return EXIT_FAILURE;
}
}
for(i = 0; i < 10; i++)
{
for(n=0; n<2; n++)
{
// Get previous flags
int f = fcntl(mypipe[i][n], F_GETFL, 0);
// Set bit for non-blocking flag
f |= O_NONBLOCK;
// Change flags on fd
fcntl(mypipe[i][n], F_SETFL, f);
}
//close(mypipe[i][0]);
}
pid = fork();
if (pid == (pid_t) 0)
{
close (mypipe[numentries-1][1]);
recievecmds(new_fd, mypipe[numentries-1][0]);
close(new_fd);
return EXIT_SUCCESS;
}
else if (pid < (pid_t) 0)
{
fprintf (stderr, "Fork failed.
");
return EXIT_FAILURE;
}
else
{
sprintf (buf,"%d",numentries);
for(i = 0; i < 10; i++)
write(mypipe[i][1], buf, strlen(buf));
memset(&buf, 0, sizeof buf);
}
接着,我试图读一下信管中的功能:
nbytes = read(mypipe[childindex][0], buf, sizeof(buf));
第一个客户联系的账号为1,第二客户指2等。 我指的是,我甚至看不到管道的位置,因为我认为,在我所呼吁的职能中,我只能通过管道。 我这样说是错了吗? 令人非常沮丧的是,试图说明这一点。 我怎么能够同时从我的父母程序中更新我的所有儿童进程?
事先非常感谢你。
edit - 我的主要问题是,我每当一个无限的时期就重新宣布管道。 非常 d错,立即认识到,这可能是我问题的根源。 然而,虽然目前第一家儿童/管道 com体含有正确数据......第二个没有。 我遗憾地看到,如果我能凭借咨询意见来表明这一点的话!
当然,由于我手工选择将数据从管道中取出的一种选择,因此,现在我会遇到问题。 我不得不想出一种办法,即要么每当更新所有管道的数据时就获得数据,要么确保仅仅获得最新数据(也许只是一个焦炭时)。
感谢与我站在一起! 我对不把整个方案放在一边表示歉意,但有一个很大的界限。 我当然应该提到,我有了一个无限的漏洞。