gpt4 book ai didi

c - write() 和 read() 如何在 C () 中交互?

转载 作者:太空宇宙 更新时间:2023-11-03 23:37:27 25 4
gpt4 key购买 nike

我无法理解 read()write() 在 C 中的工作方式。我正在使用的代码似乎正在写入 STDOUT_FILENO 并从 STDIN_FILENO 中读取相同的数据。我想知道是否应该是这种情况,因为这两个文件描述符是不同的。

我已经查看了手册页,它们似乎根本没有帮助。

代码如下:

if (write(STDOUT_FILENO, "\x1b[6n", 4) != 4) return -1;
printf("\r\n");
char c;
while (read(STDIN_FILENO, &c, 1) == 1) {
if (iscntrl(c)) {
printf("%d\r\n", c);
} else {
printf("%d ('%c')\r\n", c, c);
}
}

代码输出以 if 语句格式化它的方式写出的转义序列,这意味着 STDIN_FILENO 以某种方式读取 的输出STDOUT_FILENO。这是它应该如何工作吗?如果是,为什么?

最佳答案

不,它完全符合您的要求:

^[[6n 是 DSR(设备状态报告)的 ansi 转义序列。这会以 ^[[r;cR 格式将光标的当前位置报告给终端输入 (stdin),其中“r”和“c”分别为“行”和“列”。您可以使用它来确定光标在终端中的位置。

这是终端的一个特殊功能,它理解并处理这样的控制代码,而不是标准输入/标准输出的通常行为。通常,您不会从 stdin 读取您写入 stdout 的内容(这里也不是这种情况,它只是看起来相似!)

关于c - write() 和 read() 如何在 C (<unistd.h>) 中交互?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55445716/

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