在linux中使用父进程和子进程中的Pipe

时间:2015-02-27 11:55:41

标签: c linux process pipe fork

我为管道编写了一个代码,每次父管理首先为什么会发生这种处理没有规则哪个处理首先执行但是父母总是先死,为什么,任何人都可以解释这个代码。

main()的 {

int data_pass;
int file_pipes[2];
const char *some_data = "my name is khan";
char buffer[BUFSIZ + 1];
pid_t pid;
memset(buffer,'\0',BUFSIZ);
if(pipe(file_pipes) == 0)
{
    pid = fork();
    switch(pid)
    {

        case -1:
        {
            printf("cant create \n");
            exit(0);
        }
        case 0:
        {
            data_pass = read(file_pipes[0],buffer,BUFSIZ);
            printf("readed data is %s\n",buffer);
            exit(0);
        }
        default:
            {

            sleep(5);
            data_pass = write(file_pipes[1],some_data,strlen(some_data));
            printf("wrote\n");
        }
    }
}
exit(0);

}

O /对 - >写

 readed data is my name is khan

1 个答案:

答案 0 :(得分:0)

这取决于调度程序。在某些系统上,child是在runnable状态下创建的,但是parent可以使用他的整个时间量。在其他一些系统上可以实现不同的,父节点被停止,子节点被选中立即运行。

总之,您不能依赖并行运行的进程的执行顺序而不进行同步。

请参阅syscall waitpid 等待

同样 sleep(5)并不意味着进程将睡眠5秒钟。如果调度程序计划具有更高优先级的其他进程,则可以更多。如果进程从OS获得信号,它也可以更少。