小编Chr*_*ris的帖子

C UNIX中的叉子和管道

我不确定我是不是在这里咆哮着正确的树......但是这里有.

我正在尝试将数据从父进程传递给所有子进程.这是一个简单的服务器程序,基本上将保留连接的客户端列表,然后将连接的客户端的路由表发送到每个客户端.这最终将包括关于每个客户端的信息结构......但是现在我只想让每个分叉进程从父进程获得相同的信息.

在父进程中,首先我设置我的管道并将它们设置为非阻塞(当管道中没有任何新数据时).与客户端建立连接后,将增加条目数变量以反映此新连接.然后我将子进程分叉到一个新函数并用新的表条目更新我的管道数组(我现在有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.\n");
        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(); …
Run Code Online (Sandbox Code Playgroud)

c fork ipc pipe

4
推荐指数
1
解决办法
6574
查看次数

标签 统计

c ×1

fork ×1

ipc ×1

pipe ×1