gpt4 book ai didi

linux - 为什么 fd[1] 是写的而 fd[0] 是读的?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:09:33 25 4
gpt4 key购买 nike

我正在学习 linux 操作系统,我有一个关于管道的问题。

我想实现一个管道。

所以我定义了int fd[2];

但是为什么fd[0]是读而fd[1]是写呢?

0代表stdin吗? (我认为是写)而1代表stdout(我认为是读)

我可以只让 fd[0] 写,fd[1] 读吗?

谢谢你们。

最佳答案

这是一个任意的设计选择。

pipe 函数的声明是:

int pipe(int filedes[2]);

鉴于 C 关于指针和数组的规则(阅读 section 6 of the comp.lang.c FAQ 了解详细信息),filedes 实际上是一个 int* 类型的指针;它应该指向 2 元素数组的第 0 个元素。

如果它只返回一个文件描述符,它可以将它作为函数结果返回。因为它需要返回两个文件描述符,所以它需要一个指针来存储这两个值。使用 2 元素数组是一种简单的方法。

当然,它的设计可能有所不同。例如,它可以返回一个结构,或者采用一个指向结构的指针,但现有接口(interface)没有真正的问题。

将索引 0 和 1 用于输入和输出与将文件描述符 0 和 1 用于标准输入和标准输出并没有特别相关,尽管我认为可能会有一些影响。它确实让人容易记住;例如,我们使用短语“输入/输出”这一事实提醒我们输入描述符的索引为 0,输出描述符的索引为 1。

但最终,它只是这样定义的。它由 the POSIX standard 指定,标准化了现有的做法;它起源于早期的 UNIX 系统,甚至可能更早。

关于linux - 为什么 fd[1] 是写的而 fd[0] 是读的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29921246/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com