在FD中没有可用数据之前,execlp是否会被阻塞?

时间:2019-12-24 04:33:13

标签: c pipe dup

这是对我得到的分配的更正,该分配是在C程序中模拟命令who|grep。当我测试它时,它按预期工作。

据我所知,当调用fork时,两个进程(子进程和父进程)同时运行,我不了解,是什么使命令以正确的顺序执行,是否有必要管道FD中可用的数据,因此execlp('wc', 'wc', NULL)被执行?在从子进程接收到数据之前,它将被阻塞吗?

int fd[2], n;
if(pipe(fd) == -1){
    perror("Pipe creation failed");
    exit(1);
}
n = fork();
if(n == -1){
    perror("Fork error");
    exit(2);
}
else if(n == 0){ //son
    close(1);
    dup(fd[1]);
    close(fd[1]);
    close(fd[0]);
    execlp("who", "who", NULL);
}else{
    close(0);
    dup(fd[0]);
    close(fd[0]);
    close(fd[1]);
    execlp("wc", "wc", NULL);
}

从我在man 7 pipe部分中找到的内容管道和FIFO上的I / O

  

如果进程尝试从空管道读取,则read(2)将阻塞,直到有可用数据为止。如果某个进程尝试写入一个已满的管道(请参见下文),则write(2)会阻塞,直到从管道中读取了足够的数据以允许写入完成。通过使用fcntl(2)F_SETFL操作启用O_NONBLOCK打开文件状态标志,可以实现非阻塞I / O。

这是否仍适用于从FD获取输入的execlp之类的功能

0 个答案:

没有答案