Bob*_*j-C 1 c linux operating-system pipe
我的问题是我可以写一个整数到管道?如何 ?
我需要先制作3个流程,然后生成2个数字,第二个生成数字,第三个打印结果(USING PIPE)
谢谢大家
您要做的复杂部分是创建管道.你可以让shell为你做...
$ ./makenumbers | ./addnumbers | ./printresult
Run Code Online (Sandbox Code Playgroud)
但那很无聊,是吗?你必须有三个可执行文件.那么让我们来看看这些垂直条在C级上做了什么.
您使用pipe系统调用创建管道.您重新分配标准输入/输出dup2.您创建新进程fork,并等待它们终止waitpid.设置整个程序的程序看起来像这样:
int
main(void)
{
pid_t children[2];
int pipe1[2], pipe2[2];
int status;
pipe(pipe1);
pipe(pipe2);
children[0] = fork();
if (children[0] == 0)
{
/* in child 0 */
dup2(pipe1[1], 1);
generate_two_numbers_and_write_them_to_fd_1();
_exit(0);
}
children[1] = fork();
if (children[1] == 0)
{
/* in child 1 */
dup2(pipe1[0], 0);
dup2(pipe2[1], 1);
read_two_numbers_from_fd_0_add_them_and_write_result_to_fd_1();
_exit(0);
}
/* parent process still */
dup2(pipe2[0], 0);
read_a_number_from_fd_0_and_print_it();
waitpid(children[0], &status, 0);
waitpid(children[1], &status, 0);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
请注意:
dup2电话; 你可以将管道fd号传递给子程序调用.但是,如果你是exec孩子的新二进制文件,这是更典型的,你需要它们.然后,您还必须担心确保编号为3及更高的所有文件描述符都已关闭._exit代替exit.试着找出它是什么.read而write不是stdio.h调用.原因与我使用的原因有关_exit.| 归档时间: |
|
| 查看次数: |
1727 次 |
| 最近记录: |