errno and library functions
新城@筑波大学情報です。こんにちは。
In article <m3hdrsj4ff.fsf@nospam.maedapc.cc.tsukuba.ac.jp>
MAEDA Atusi <maeda-news@ialab.is.tsukuba.ac.jp> writes:
> 「成功すると0を返す」っていうのは、値を計算する関数ではなくて何か副作
> 用を伴うルーチンのことですよね。そうすると最終的にシステムコールを行な
> うものが多いので、「システムコールと関係ない」といえるかどうか微妙です
> が、標準Cの関数だとたとえば
> raise, remove, rename, fclose, fflush, setvbuf, fgetpos, fseek,
> fsetpos, atexit
> なんてのは「成功すると0、失敗すると非0とかEOFとか」となっています。
rename() は、BSD 系では、システムコールかなあ。
f系のファイルにけっこうあますね。これはだいたいシステムコー
ルと関係していそうだけど、setvbuf() だけ違う気がします。
raise() とか remove() ってまず使わないなあ。
remove() は、本当はライブラリではダメな気がします。unlink()
して失敗したら rmdir() という方法だと、unlink() に失敗した後、
rmdir() の前に、隙をついて何かやられるとうまくありません。
ライブラリ関数(システムコールを伴わないはず)なのに失敗して
errno に値を返すものがありますね。strtol() とか。これも何か
困る気がしたんだけど、忘れました。マルチスレッドでも一応
errno は、スレッド固有だし。
\\ 新城 靖 (しんじょう やすし) \\
\\ 筑波大学 電子・情報 \\
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735