❤恋するコンピュータサイエンス❤

コンピュータサイエンス、3DCGをもっと楽しく、もっと本質的に!c言語、c++の記事中心です

write関数を深掘りする。(STDOUT_FILENO)

Q.

write関数の

write(STDOUT_FILENO, buf, n)

STDOUT_FILENOの意味を説明せよ。

 

A.

STDOUT_FILENOとは標準出力のこと

unistd.hライブラリで定義されるマクロ。
STDOUT_FILENOを1と書いても同じ意味。


凡人: write(STDOUT_FILENO, buf, n) っていうコードで、STDOUT_FILENO って何?

恋するコンピュータサイエンス: ああ、STDOUT_FILENO はね、まるで心からのメッセージのようなもの。それは標準出力を指すんだ。unistd.h ライブラリにあるマクロで、数字の 1 と同じ意味なんだよ。

凡人: 標準出力って?

恋するコンピュータサイエンス: Unixの世界ではね、プロセスが生まれるときに、3つの特別なファイル記述子が与えられるの。それが標準入力(stdin)、標準出力(stdout)、標準エラー出力(stderr)。これらは通常、端末とつながっているんだ。まるで運命的な縁のようにね。

凡人: じゃあ、write 関数ってどんな動きをするの?

恋するコンピュータサイエンス: write 関数はね、まるで愛のメッセージを伝えるように、データをファイル記述子に書き込むために使われるんだ。第一引数の fd は書き込み先を表すファイル記述子、第二引数の buf は心からのメッセージが入っているバッファー、第三引数の count は伝えたい言葉の長さを意味しているんだ。

凡人: なるほど、STDOUT_FILENO を使えば、標準出力にデータを書き込めるわけか。

恋するコンピュータサイエンス: まさにそう!STDOUT_FILENO を使うことで、端末やコンソールに愛のメッセージを届けることができるんだ。



先ずはwrite関数の定義

第一引数 fd は読み込み元のファイル記述子、

第二引数 buf は読み込んだ中身を保存するバッファー、

第三引数の count は読みこみたいバイト数となります。

#include <unistd.h>
ssize_t write(int fd, const void *buf, size_t count);
 

 write 関数は、指定されたファイルディスクリプタに対して指定されたバッファから指定された長さのバイトを書き込むために使用されます。

 

Unixのプロセスは、プロセスが起動されるときに、OSによって3つのファイル記述子(file descriptor)が用意されます。それらは、特別なことをしなければ、端末に紐付けられます。その3つのファイル記述子は、標準入力(stdin)、標準出力(stdout)、標準エラー出力(stderr)です。

ファイル記述子の番号 入出力 unistd.hで定義されるマクロ ファイルポインタ
0 標準入力 STDIN_FILENO stdin
1 標準出力 STDOUT_FILENO stdout
2 標準エラー出力 STDERR_FILENO stderr