gpt4 book ai didi

c - 文件描述符 0

转载 作者:太空狗 更新时间:2023-10-29 12:16:06 25 4
gpt4 key购买 nike

图自this thread讨论文件描述符和表;

我想知道 shell 中如何处理标准输入(即文件描述符 0,而不是 C 的标准输入 FILE 结构)。

当我在 C 中运行一段类似 read(0, buffer, 1024) 的代码时,默认情况下,C 文件描述符 0 连接到键盘,shell 允许我输入文本,因为我们假设 read 正在等待读取字符设备“标准输入”(即键盘)的内容。但是标准输入难道不会简单地为空并产生它作为结果吗?好吧,假设“连接到键盘”路径是解释它的方式;如果是这样,那一定意味着 shell 行缓冲了它们的命令,对吗?在文件描述符 0 上调用读取意味着 shell 中的文件描述符 0 连接到标准输入的行缓冲缓冲区输出,而不是直接连接到键盘,那么是什么让 C 等待?此外,为什么我们不能在标准输入上使用 lseek() - 所说的"file"是否总是在每次对其进行“写入”时被覆盖,因此没有什么可以作为标准输入进行搜索(作为键盘)本身不是存储设备上的文件吗?

最佳答案

read(0, buffer, 1024)

是系统调用,是对内核代码的调用。内核对 read 的实现将分派(dispatch)到终端(或伪终端)设备驱动程序,该设备驱动程序将等待您输入 1024 个字符、换行符或 EOF 标记,Ctrl +D.

then that must mean shells line buffer their command's, right?

如果终端设置为正确的模式,则在终端驱动程序中执行缓冲。否则,程序将一直等到输入 1024 个字节。

Furthermore, why can we not use lseek() on standard input

如果 stdin 是一个普通文件,你可以。您只是不能在终端上搜索,因为这需要终端驱动程序记住自终端设备创建以来通过终端设备的所有数据。

关于c - 文件描述符 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24136545/

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