日記の練習です。
説明
seek に対応しているファイルでは、read はファイルオフセットから行われ、ファイルオフセットは読み込んだバイト数分だけ進められる。ファイルオフセットがファイル末尾かそれより先の場合は、読み出しは行われず、 read() は 0 を返す。
https://linuxjm.sourceforge.io/html/LDP_man-pages/man2/read.2.html#lbAD
返り値
成功した場合、読み込んだバイト数を返す (0 はファイルの終りを意味する)。 ファイル位置はこの数だけ進められる。 この数が要求した数より小さかったとしてもエラーではない; 例えば今すぐには実際にそれだけの数しかない場合 (ファイルの最後に近いのかもしれないし、パイプ (pipe) や端末 (terminal) から読み込んでいるかもしれない) や read() がシグナル (signal) によって割り込まれた場合にこれは起こりえる。
エラーの場合は、-1 が返され、 errno が適切に設定される。この場合はファイル位置が変更されるかどうかは 不定である。
https://linuxjm.sourceforge.io/html/LDP_man-pages/man2/read.2.html#lbAE
cat.c の該当部分
https://copyanddestroy.hatenablog.com/entry/2025/03/03/174422
for (;;) { n = read(fd, buf, sizeof buf); if (n < 0) die(path); if (n == 0) break; if (write(STDOUT_FILENO, buf, n) < 0) die(path); }
疑問だったところが、わかったかもしれない。ファイルオフセット。
追記:2025/03/11
ファイルオフセットについて、その先の方に書いてあった。
『ふつうの Linux プログラミング』第5章 「ストリームにかかわるシステムコール」
5.7 その他のシステムコール
gyazo.com