Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

【自習メモ】C標準ライブラリで標準出力/入力を扱うSTDOUT_FILENO/STDIN_FILENOについて

実際のところ

例のお手本プログラムから抜粋。

    // Write data to file
    write(fd_out, (const void*)in_array, nBytes);

    // Write data to stdout as well
    write(STDOUT_FILENO, (const void*)in_array, nBytes);

ここで、write関数の引数はこんな順番なので……
STDOUT_FILENOはファイルディスクリプターとかと同じ所におくみたい。

write(int fd, const void *buf, size_t count);

実際、参考もとサイトの解説では

STDOUT_FILENO == fileno(stdout)

ということで、

関数 fileno() は、引数 stream を調べ、その整数のディスクリプターを返す。

とあるから標準出力のディスクリプターを指定しているのは間違いない様子。

ファイルなら、ファイルのディスクリプターを渡すけれども、
今回は標準出力が欲しいので、こうする、と。


これがSTDIN_FILENOならread関数に対しておんなじ様な処理になるわけですね。