簡體   English   中英

從stderr而不是stdin讀取

[英]Reading from stderr instead of stdin

我在野外遇到了這樣的代碼,我想知道為什么這樣做有效。 該代碼從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次(可能具有不同的選項)。

當您通過管道傳輸內容時,情況已不再如此,並且此破碎的代碼不再起作用,因為stdin現在是一回事,而stdout / stderr是另一回事。

在您的代碼示例中,這樣做是沒有意義的,最好將其描述為錯誤。 但是也許那個“狂野的代碼”的作者試圖做一些不同的事情,並且有這樣做的理由。 您是否為所找到的代碼示例提供參考?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM