問題タブ [file-descriptor]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - C でのファイル記述子の割り当て
ソケットが作成されるか、C でファイルが開かれる/作成される場合、ソケット/ファイルに割り当てられたファイル記述子は、利用可能な最も低い値の記述子であることが保証されていますか? この点に関して、C 仕様はファイル記述子の割り当てについて何と言っていますか?
c - 「混合」ファイル記述子/ソケットのクローズ/クリーンアップ
accept() を使用してソケットを作成し、fdopen() を使用してソケットから FILE を作成する場合、すべてをクリーンアップするにはどうすればよいですか? FILE に対して fclose() を実行する必要がありますか? ソケットに対して shutdown() および close() を実行する必要がありますか? それとも shutdown() および/または close() または fclose() のみを実行する必要がありますか? fclose() を実行しない場合、手動で FILE ポインターを free() する必要がありますか?
c# - C# でファイル記述子へのパイプ接続を開く
ファイル記述子 3 からクライアント プログラムからメッセージを読み取る従来のアプリがあります。これは外部アプリであるため、これを変更することはできません。クライアントは C# で記述されています。C# で特定のファイル記述子への接続を開くにはどうすればよいですか? AnonymousPipeClientStream() のようなものを使用できますか? しかし、接続先のファイル記述子をどのように指定すればよいのでしょうか?
c - 終了する前にファイル記述子を閉じる必要はありますか?
もちろん、ほとんどの状況に対する即時の答えは「はい」です。私は、プロセスが割り当てられたリソースを正しくクリーンアップする必要があると固く信じていますが、私の状況では、固定された起動時にファイル記述子の数を取得し、終了する前にそれらをすべて閉じます。
これは組み込みプラットフォームであり、悪いスタイルを導入することなく、コードをできるだけコンパクトにしようとしています。しかし、とにかくファイル記述子は終了する前に閉じられるため、このファイル記述子のクリーンアップ コードは何らかの目的に役立ちますか? いつもすべてのファイル記述子を閉じていますか?
bash - UNIX システムで別のプロセスからファイル記述子を閉じる方法
コマンドlsofを使用して、実行中のすべてのプロセスのファイル記述子を取得できますが、私がやりたいのは、そのプロセス内にいなくても、これらの記述子の一部を閉じることです。これは Windows で実行できるため、一部のアプリケーションのブロックを簡単に解除できます。
そのためのコマンドまたは機能はありますか?
java - Linux プラットフォームでソケットを使用すると、ファイル記述子のリークが発生しますか?
たとえば、呼び出してソケットを開いたり閉じたりすると
Linux は、このソケットがまだ開いているか、少なくとも接続用のファイル記述子が存在すると述べています。このプロセスの開いているファイルを lsof で照会すると、閉じられた接続のエントリがあります。
このエントリは、プログラムが終了するまで残ります。最終的にソケットを閉じる他の方法はありますか? Java アプリケーションが多くのファイル記述子をブロックするのではないかと少し心配しています。これは可能ですか?または、ReuseAdress が設定されていても、Java はこれらのソケットを再利用するために保持しますか?
c - Linux でカスタマイズされたファイル記述子を作成する方法
記述子がカスタマイズ可能な動作を持つファイルを作成したいと思います。特に、ファイル記述子を作成したいと思います。これは、書き込まれると、すべての行の前にプロセスの名前と pid (およびおそらく時間) が追加されますが、他のことを行うのに役立つと想像できます。
書き込みプログラムを変更したくありません - 1 つには、シェル/perl/etc でさえ、システム上のすべてのプログラムで動作するようにしたいということです。すべてのソース コードを変更することは、不可能ではないにしても非現実的です。
この場合、パイプは機能しないことに注意してください。書き込みプロセスfork()
が s の場合、新しく作成された子は fd を共有し、パイプの読み取り側では親と区別できないためです。
行うアプローチはありますが、かなり不器用だと思います:
- そのような fd を作成するカーネル モジュールを作成します。たとえば、いくつかを開いて
/dev/customfd
から、モジュールに何らかの変換などを行うように指示したり、ユーザー空間やソケットなどにデータを送信したりすることができます。 - fd操作関数をオーバーライドし、「特別な」fdでこれらの種類のことを行うLD_PRELOADを使用します。
ただし、これらのアプローチはどちらも非常に手間がかかるため、より良い方法や、役立つインフラストラクチャ (市販のライブラリなど) があるかどうかを知りたいと思います。
カーネルの変更を伴わない解決策を望んでいますが、必要に応じて受け入れる準備ができています。
単なるアイデア: FUSE は答えになるでしょうか?
windows - ulimit -n に相当する Windows
unix コマンド "ulimit -n" に相当する Windows は何ですか?
基本的に、コマンドプロンプトから最大fd制限を設定したい。
select - ソケットプログラミングでselect()関数を使用するには?
プロトタイプは次のとおりです。
私はかなり長い間、この機能を理解するのに苦労してきました。私の質問は、0 から nfds-1 までのすべてのファイル記述子をチェックし、返されたときに read-fds、write-fds、および except-fds を変更する場合、FD_SET を使用してファイル記述子をセットに追加する必要があるのはなぜですか?最初に、とにかくすべてのファイル記述子をチェックしますか?
posix - 最も割り当てられたファイル記述子を取得する
現在のプロセスに割り当てられた最大のファイル記述子番号を取得する移植可能な方法 (POSIX) はありますか?
たとえば、AIXで番号を取得する良い方法があることは知っていますが、移植可能な方法を探しています。
私が尋ねている理由は、開いているすべてのファイル記述子を閉じたいからです。私のプログラムは、ルートとして実行され、ルート以外のユーザーの子プログラムをフォークおよび実行するサーバーです。子プロセスで特権ファイル記述子を開いたままにしておくと、セキュリティ上の問題があります。一部のファイル記述子は、私が制御できないコード (C ライブラリ、サードパーティ ライブラリなど) によって開かれている可能性があるため、どちらにも依存できませんFD_CLOEXEC
。