[英]Why is STDIN_FILENO always zero?
我想知道在 stdio header 中將STDIN_FILENO
設置為0
是否有一個簡單但合乎邏輯的原因,我在測試更復雜的代碼時意識到了這一點,這是它的簡短版本:
#include <unistd.h>
#include <stdio.h>
void main(char **argv)
{
char *promt = "Not a terminal";
int inter = 1;
int counter = 1;
isatty(STDIN_FILENO) == 0 ? inter = 0 : inter;
while (TRUE)
{
inter == 1 ? write(1, promt, 16) : inter;
fflush(stdout);
counter++;
}
}
另外,如果可能知道, STDIN_FILENO
和Stream
之間的關系是什么?
STDIN_FILENO
是 posix 並且必須是0
。
因為STDIN_FILENO
根據 POSIX定義為零:
本參考頁中描述的功能符合 ISO C 標准。 此處描述的要求與 ISO C 標准之間的任何沖突都是無意的。 本卷 POSIX.1-2017 遵循 ISO C 標准。 [選項結束]
具有關聯緩沖的文件稱為 stream 並被聲明為指向已定義類型 FILE 的指針。 fopen() function 應為 stream 創建某些描述性數據,並返回一個指針以在所有進一步的事務中指定 stream。 通常,在 <stdio.h> header 中聲明了三個帶有常量指針的打開流,並與標准打開文件相關聯。
在程序啟動時,應預定義三個流且無需顯式打開:標准輸入(用於讀取常規輸入)、標准 output(用於寫入常規輸出)和標准錯誤(用於寫入診斷輸出)。 打開時,標准錯誤 stream 沒有完全緩沖; 當且僅當可以確定 stream 不是指交互式設備時,標准輸入和標准 output 流是完全緩沖的。
<unistd.h>
中的以下符號值定義了在應用程序啟動時應與 C 語言stdin
、stdout
和stderr
關聯的文件描述符:
STDIN_FILENO
標准輸入值,
stdin
。 它的值為 0 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.