lseek関数がファイル記述子を長い整数として返すのはなぜですか? [閉鎖]

lseek関数がファイル記述子を長い整数として返すのはなぜですか? [閉鎖]

本によるとUnix環境の高度なプログラミング:-

"lseek名の文字lは 'long'を意味します。off_tデータ型が導入される前は、オフセットパラメータと戻り値の両方が長かった。Cにlongが追加されたとき、lseekはバージョン7にありました(関数eekとバージョン6でも同様の機能を提供していると教えてください。」

私たちはファイル記述子の値が制限されていることを知っています。値は範囲内です。0-OPEN_MAX-1したがって、以前のバージョンがファイル記述子として長期間使用されている場合、これは、プロセスごとに開くことができるファイルの最大数をシステムワード形式(32ビットまたは64ビット)に応じて変更する必要があることを意味します。利用可能なファイル記述子の数はおそらく10^18です。私は正しいですか?

答え1

lseekパラメータlongと戻り値は次のとおりです。オフセットファイルから追加しても、longファイル記述子には影響しません。

様々なワード長は、利用可能なオフセットサイズに影響を与える。lseek64解決策を見つけてください。

答え2

これは誤解だと思います。

本の完全な引用は次のとおりです。

3つのシンボル定数(SEEK_SET、、SEEK_CURおよびSEEK_END)がSystem Vに導入されました。以前は、whereceは0(絶対)、1(現在のオフセット基準)、または2(ファイルの終わりに基づいて)として指定されていました。多くのソフトウェアはまだこれらの番号をハードコードしています。

l名前の文字はlseek「long」を表します。この off_tデータ型を紹介する前に、オフセットパラメータそして戻り値長い整数です。 lseekは、バージョン7では、長い整数がCに追加されたときに導入されました。 (バージョン6の機能seekと同様の機能を提供しますtell。)

テキストのどこにも、特定の時点の戻り値がファイル記述子であるという言及はありません。

関連情報