gpt4 book ai didi

c - 从 stderr 而不是 stdin 读取

转载 作者:太空狗 更新时间:2023-10-29 11:35:30 25 4
gpt4 key购买 nike

我在野外遇到过这样的代码,我想知道为什么这样行得通。代码从 stderr (fd==2) 而不是 stdin (fd==0) 读取。奇怪的是这实际上有点管用。您可以在控制台读取输入,但不能读取管道输入。知道这里发生了什么吗?

#include <stdio.h>
#include <unistd.h>
int main(){
char buf[15];
int nchars=read(2,buf,15);
printf("%d '%s'\n",nchars,buf);
}

最佳答案

好问题!这是可行的,因为当您在终端的控制台前时,STDIN、STDOUT 和 STDERR 最终都指向相同的资源:/dev/tty(或您的平台调用的任何内容)。三个文件描述符是同一个文件打开 3 次(可能有不同的选项)。

当您通过管道传输内容时,情况就不再如此,而且这个损坏的代码也不再有效,因为现在标准输入是一回事,而标准输出/标准错误是另一回事。

在您的代码示例中,这样做没有任何意义,最好将其描述为错误。但也许该“野外代码”的作者正在尝试做一些不同的事情并且有他或她这样做的理由。您有找到的代码示例的引用吗?

关于c - 从 stderr 而不是 stdin 读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46248477/

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