簡體   English   中英

為什么 STDIN_FILENO 總是為零?

[英]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_FILENOStream之間的關系是什么?

STDIN_FILENO是 posix 並且必須是0

https://man7.org/linux/man-pages/man3/stdout.3.html

因為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 語言stdinstdoutstderr關聯的文件描述符:

STDIN_FILENO

標准輸入值, stdin 它的值為 0

暫無
暫無

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

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