ソケットが作成された場合、またはファイルがCでオープン/作成された場合、ソケット/ファイルに割り当てられたファイルディスクリプタが最低値のディスクリプタであることが保証されていますか? C仕様では、この点に関するファイル記述子の割り当てについて何が言いますか?Cでのファイル記述子の割り当て
答えて
これは最低になることは保証されておらず、実装に依存する(1)です。しかし、一般的に、オープンファイル記述子を割り当てるルーチンは、最初にオープンする方法を使用します。それは、いくつかの下位のものがフリーになった直後に、あなたが予想していたよりも高い記述子を残している可能性があります。
私はこのことを知ることができると思う唯一の理由は、select関数のためです。チェックする必要がある最も高いファイル記述子を渡すとスピードアップします。
(1) IEEE標準に準拠する実装では、ファイルの最も低い未使用ディスクリプタが保証されていますが、これはソケットには当てはまりません。すべての実装がopen()のIEEE標準に準拠しているわけではありませんので、ポータブルソフトウェアを作成する場合は、それに依存しないことをお勧めします。
私はCスペック、おそらくあなたのOSの仕様では見つからないと思います。 Linuxでの私の経験は、常にそれが最も低いということでした。
私はこれを別の質問と相殺します - なぜこのことが重要ですか? (stdin/stdout/stderrをチェックしない限り)ファイル記述子を何かと比較したり、数式を使ったりするべきではありません。あなたが知る必要があるのはint(そして保証されている)に収まる限りです。
それをselectと共に使うと 'fd_set'オブジェクトに収まる必要があります。 POSIXでは、ファイルディスクリプタを順番に割り当てる必要があるため、同様にファイルディスクリプタのセットを格納するために独自のビット配列オブジェクトを使用したい場合があります。 –
スティーブMが正しくあります。 Cにはソケットの概念はなく、ファイルI/O関数はディスクリプタではなくFILEオブジェクトへのポインタを使用します。
Cには実際にファイルを読み取る2つの方法があります.1つはFILEオブジェクトで、もう1つはファイルディスクリプタです。 –
ファイル記述子に基づく方法は、Unix APIによって提供されるシステムコールインタフェースであり、C適切な部分ではありません。 – wnoise
@aib open()、close()、lseek()、read()、write()はすべてファイル記述子を使用します。 I/Oにストリームを使用することはほとんどありません。
@Kyle select()のようなステートメントのために重要です。最も高い記述子を知ることで、パフォーマンスを向上させることができます。
C仕様では、実装に依存していると言われています。 Unixの実装を見ているならば、open(2)のmanページは "成功した呼び出しによって返されたファイルディスクリプタは、プロセスのために現在開いていない最も小さい番号のファイル記述子になります"と述べています。
特定のディスクリプタに特定のファイルを添付しようとしている場合に役立ちます。 stderrを/ dev/nullにリダイレクトしたいとします。何かのように
閉じる(2); open( "/ dev/null"、O_WRONLY);
する必要があります。もちろん、オープンで返されたfdをキャプチャして、それが2であることを確認する必要があります。
または 'dup2'を使用して、目的のファイル記述子に正しいストリームを割り当てるようにします。 – LnxPrgr3
プログラムがスレッドを使用していて、他のスレッドが何をしているのかを厳密に制御できない場合は、 'dup2'だけが安全な方法です。 'close' /' open'は、他のスレッドがファイル記述子を取得する競合状態を引き起こします。 –
- 1. 新しい関数がゴランにファイル記述子を割り当てます
- 2. 割り当てられた最も高いファイル記述子を取得する
- 3. c strcpyファイル記述子
- 4. このプロパティ記述子とECMAScript 5のプロパティ割り当ての違いは?
- 5. Cのファイル記述子を開く
- 6. char offファイル記述子の比較c
- 7. Objective-Cの記憶域割り当て
- 8. C++でのファイル記述子のなりすまし
- 9. このソケット/ファイル記述子の割り当てが無効なのはなぜですか?
- 10. 無料で割り当てられたファイル記述子の合計は常にゼロです - Ubuntu 14.04 LTS
- 11. C#のオーディオ記述子MFCC
- 12. webservice記述子ファイル
- 13. Cパイプ:不正なファイル記述子
- 14. Bash:ファイル記述子のリダイレクト
- 15. ファイル記述子の位置
- 16. ファイル記述子付きのオープン・リード・ファイル
- 17. JavaScript Glib.spawn_async stdoutファイル記述子
- 18. ソケットとファイル記述子
- 19. epollファイル記述子操作
- 20. ファイル記述子とシステムコール
- 21. ゴールン不良ファイル記述子
- 22. POSIXファイル記述子とCファイルの相互作用
- 23. メモリの割り当て/割り当て解除(WindowsではC++)
- 24. 割り込み記述子テーブル(IDT)の変更
- 25. バッチスクリプトの非標準のファイル記述子
- 26. Python:クラスの変数に属性を追加して割り当て(記述子クラス)を生かす
- 27. C++クラス配列のメモリ割り当ての再割り当て
- 28. python closeファイル記述子の質問
- 29. N:1つのファイル記述子?
- 30. 出力ファイル記述子のリダイレクト
open()を呼び出すと、利用可能な最も低いファイル記述子が返されます。http://www.opengroup.org/onlinepubs/009695399/functions/open.html ソケットの保証はありません。 –
リマインダと具体的なリファレンスをありがとう! –
「IEEE標準」とは、POSIXです。これについて言及する価値は... –