copy and destroy

catch and eat

read(2) のファイルオフセット

日記の練習です。

Man page of READ
gyazo.com

説明

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

powered by hatena blog.
the nikki system for lifelogging junkies.

all posts © their original owners.
writing is reusable solely under the by creative commons license.