![lseek関数がファイル記述子を長い整数として返すのはなぜですか? [閉鎖]](https://linux33.com/image/116837/lseek%E9%96%A2%E6%95%B0%E3%81%8C%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E8%A8%98%E8%BF%B0%E5%AD%90%E3%82%92%E9%95%B7%E3%81%84%E6%95%B4%E6%95%B0%E3%81%A8%E3%81%97%E3%81%A6%E8%BF%94%E3%81%99%E3%81%AE%E3%81%AF%E3%81%AA%E3%81%9C%E3%81%A7%E3%81%99%E3%81%8B%EF%BC%9F%20%5B%E9%96%89%E9%8E%96%5D.png)
本によると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
。)
テキストのどこにも、特定の時点の戻り値がファイル記述子であるという言及はありません。