私のCプログラムで動作を実装したいので、SIGINTが発生した場合、開いているファイル記述子をすべて閉じるようにします。それらのリストを取得する簡単な方法はありますか?C開いているファイル記述子をすべて取得する
答えて
開いているすべてのファイル記述子を追跡し、個別に閉じます。
通常は、使用しているライブラリにファイルが開いている可能性があり、そのライブラリを閉じるとそのライブラリが誤動作する可能性があります。
実際には、ファイルディスクリプタを無差別に閉じると、プログラムの別の部分がファイルディスクリプタを覚えて使用しようとすると、予期しないエラーが発生する可能性があります。他のファイルはが間違ったファイルで動作して以来開かれています。ファイルを開く責任を持つコンポーネントがファイルを閉じる責任を持つことは、はるかに優れています。
利用可能であれば、/proc/<pid>/fd.
の内容を読むことができます。
しかし、あなたのアプリケーションがいくつかを閉じたり、新しいものをあなたの読んだ/proc/<pid>/fd
の間に開き、あなたが読んだものを閉じようとしている場合に発生する可能性がある、潜在的な競合に注意してください。
私はこれにケビン・リードのアプローチを推奨したいと思います。
私のソリューション:
すべてがFD年代が可能な最低値である開かれました。
open(2)
にラッパー関数を作成します。
あなたの新しい関数は、要求されたfdを開き(そして返す)、その値をdefine_if_is_the_higtest_fd_and_store_it()
という関数に渡します。
save_fd()
(初期値は3(cuz stderr
は2))という名前のシングルトン関数(1 'ディスクリプタテーブルのみがあります)の場合にのみアクセス可能です。int hightest_fd_saved
が必要です。
シグナル機能にSIGINT
を設定してください。内部では、[3、return_fd()
]からループを実行します。
私はそうだと思います...
- 1. Cのファイル記述子を開く
- 2. 割り当てられた最も高いファイル記述子を取得する
- 3. Linuxファイル記述子 - 現在のリダイレクトstdoutファイルを取得していますか?
- 4. アドレスからソケット記述子を取得していますか?
- 5. c strcpyファイル記述子
- 6. VBScriptを使用してWin32_Serviceセキュリティ記述子を取得する
- 7. ファイル記述子からFILE *ストリームを取得する方法は?
- 8. Zeroからファイル記述子を取得するZMQ_SERVERソケット
- 9. Tornado AsyncHTTPTestCaseを実行しているときに不正なファイル記述子を取得しています
- 10. protobuf reflectionを使用して、C++でbooleanフィールド記述子を取得する
- 11. 開いているファイルのすべての診断を取得
- 12. openSyncを使用してファイルを開くと、node.jsでファイル記述子を取得する方法
- 13. Elasticsearchが十分なファイル記述子を取得していません
- 14. node.jsのファイル記述子のファイルパス/名前を取得します
- 15. node.jsソケットのファイル記述子を取得しますか?
- 16. Console-Appがプロセス用の開いているファイルをすべて取得する
- 17. webservice記述子ファイル
- 18. ファイル記述子のリダイレクトが固まっています
- 19. コンテナー内の開いているファイル記述子のプロセス制限を変更する
- 20. Cパイプ:不正なファイル記述子
- 21. char offファイル記述子の比較c
- 22. cでは、ファイル記述子をブロックする方法は?
- 23. Cラッパーを記述してクラスメソッドを公開する方法
- 24. ファイル記述子メッセージが開いたときにPythonロギングが失敗する
- 25. のMaven:プラグイン記述子エラーを取得するために
- 26. protobuf記述子からメソッドオプションを取得するには?
- 27. Cでのファイル記述子の割り当て
- 28. 開いているすべてのウィンドウのタイトルを取得
- 29. すべての開いているMDIウィンドウのリストを取得
- 30. 読み取り可能なファイル記述子と書き込み可能なファイル記述子を待ちます
シグナルハンドラを検索してください。 –
なぜそんなことが欲しいですか? – qdot
メインからexit();または 'return'した後、カーネルはそれらのファイル記述子を閉じなければなりません。 – yeyo