谁能帮助我理解这个问题需要什么?以及执行步骤?
“编写一个简单的程序,创建一个管道,分叉两个进程,然后通过管道发送数据。使用两个标准程序,例如 (who) 和 (wc)。”
答案1
你知道什么是linux管道吗?如果没有,请阅读相关内容这里。因此,一项非常基本的任务是生成两个进程并将一个任务的输出连接到另一个任务的输入。这就是你的问题所在。
该问题指定应使用哪些任务:
who
:列出当前登录的所有用户,每行一个。wc
:一个计算内容的小工具 - 字数、行数、字节数......
通过这两个工具,您可以轻松统计当前登录的用户数量。
通常的 Linux 工具的一个好处是它们大多数都与 stdin 一起工作 - 这可以帮助您使用管道,因为 Linux 管道将|
左侧进程的 stdout 连接到右侧进程的 stdin!
这应该可以帮助您理解问题的含义......
答案2
Read (man) about pipeline(int pipelinefd[2]) syscall - 它返回两个文件描述符 - 一个用于读取,一个用于写入。接下来分叉两个进程 - 您仍然处于相同的(分叉进程 - 所以您会看到返回的 pipelinefd[] 数组。
接下来,如果你想在 shell 中模拟管道,你必须
在第一个过程中:
- 关闭文件描述符 1(标准输出)
- dup() 读取从 pipeline() 接收的文件描述符 - 现在它也是 fd=1 (stdout)
- 执行谁
在第二个过程中:
- 关闭文件描述符 0 (stdin)
- dup() 写入从 pipeline() 接收到的文件描述符 - 现在它也是 fd=0 (stdin)
- 执行厕所