Linuxのerrno(3)における奇妙な制限
2025-07-04
Linuxのerrno(3)のマニュアルページは、奇妙な制限を明らかにしています。関数の呼び出しが成功した場合でもerrnoが変更される可能性があり、システムコールやライブラリ関数がerrnoをゼロに設定することはありません。これは、Unixの伝統的な設計によるものです。システムコールは通常、失敗した場合にのみerrnoを返し、成功した場合はerrnoを変更しません。Cライブラリ関数は複数のシステムコールを行う可能性があり、その一部が失敗してもライブラリ関数自体の成功には影響しないため、errnoは失敗時の値のままになる可能性があります。ANSI CとPOSIXはこの動作を継承しており、関数が失敗し、そのドキュメントがerrnoの設定を指定した場合にのみ、errnoが意味を持つように要求しています。
開発