問題タブ [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.
file - ファイル記述子と開いているファイル
簡単な質問が 2 つあります。
2 つのファイル記述子が開いている同じファイルを指すのはいつですか?
開いている 2 つのファイルが同じ inode を指すのはいつですか?
また、これを説明するグラフ付きの優れたドキュメントがあれば、そのリンクを教えていただければ幸いです:)
ありがとう!
multithreading - 同じファイルへの複数のファイル記述子、C
同じファイルを開いて読み取る (書き込みではない) マルチスレッド アプリケーションがあります。スレッドごとに異なるファイル記述子を開いています (ただし、それらはすべて同じファイルを指しています)。次に、各スレッドはファイルを読み取り、ファイルを閉じて、EOF に達した場合に再度開くことができます。これでよろしいですか?ファイル記述子で fclose() を実行すると、同じファイルを指す他のファイル記述子に影響しますか?
c++ - close()ソケットの不正なファイル記述子(c ++)
プログラムが別のホストに接続できないときに、ファイル記述子が不足しています。close()システムコールが機能せず、開いているソケットの数が増えます。私はそれをつかむことができます
cat / proc / sys / fs / file-nr
コンソールからの印刷:
接続:ホストへのルートがありません
close:不正なファイル記述子
接続:ホストへのルートがありません
close:不正なファイル記述子
..
コード:
修理:
glassfish - どのツールを使用し、Glassfish から漏れているファイル記述子を見つける方法は?
毎週新しいコードを本番環境にリリースしていますが、Glassfish には何の問題もありません。今週末、ホスティング プロバイダーでラックを移動する必要がありました。コードの変更はありませんでした (電源を切って、移動し、再度ラックに入れ、電源を入れただけです) が、新しいネットワーク インフラストラクチャを使用していて、突然ふるいのようにファイル記述子がリークしています。したがって、ネットワークの変更により現在失敗している何らかの接続が確立されようとしていると推測しています。
IMQ インスタンスが組み込まれた RHEL4 で Glassfish v2ur2-b04/AS9.1_02 を実行しています。移動後、私は見始めました:
[#|2010-04-25T05:34:02.783+0000|SEVERE|sun-appserver9.1|javax.enterprise.system.container.web|_ThreadID=33;_ThreadName=SelectorThread-?4848;_RequestID=c4de6f6d-c1d6- 416d-ac6e-49750b1a36ff;|WEB0756: HTTP 処理中に例外をキャッチしました。
java.io.IOException:
sun.nio.ch.ServerSocketChannelImpl.accept0(Native Method) で開いているファイルが多すぎます
...
[#|2010-04-25T05:34:03.327+0000|WARNING|sun-appserver9.1| javax.enterprise.system.stream.err|_ThreadID=34;_ThreadName=Timer-1;_RequestID=d27e1b94-d359-4d90-a6e3-c7ec49a0f383;|
com.sun.jbi.management.system.AutoAdminTaskでの java.lang.NullPointerException .pollAutoDirectory(AutoAdminTask.java:1031)
lsof を使用してファイル記述子の数を確認すると、次のようなエントリがかなり表示されます。
java 18510 root 8556u sock 0,4 1555182 プロトコルを識別できません
java 18510 root 8557u sock 0,4 1555320 プロトコルを識別できません java
18510 root 8558u sock 0,4 1555736 プロトコルを識別できません
1555883 プロトコルを識別できません
毎分開いているファイル記述子のカウントを行うと、毎分 12 ずつ増加することがわかります。これらのソケットが何であるかはわかりません。
アプリケーションをアンデプロイしたので、プレーンな Glassfish インスタンスしか実行されていませんが、それでも 1 分間に 12 個のファイル記述子がリークしています。したがって、このリークは Glassfish または潜在的に IMQ にあると思います。
これらの未知のプロトコルのソケットを追跡するには、どのようなアプローチを取る必要がありますか? どこを見るべきかについての詳細情報を得るために、どのツールを使用できますか (またはフラグを lsof に渡すことができますか?)
ありがとう、
チャック
c++ - POSIXファイル記述子からc++ fstreamを構築する方法は?
私は基本的に fdopen() の C++ バージョンを探しています。私はこれについて少し調査しましたが、これは簡単なはずのことの 1 つですが、非常に複雑であることが判明しました。この信念に欠けているものはありますか (つまり、本当に簡単です)? そうでない場合、これを処理するための優れたライブラリがどこかにありますか?
編集:私のソリューション例を別の回答に移動しました。
c - popen 後にファイル記述子を複製する
Linuxでコマンドを実行するためにpopenを使用しています.4つのプロセスが同じ出力を使用します。ファイル記述子を再度複製して、各プロセスに渡しようとしています。ここに私のコードがあります:
実際に total を 1 に設定すると問題なく動作しますが、total = 4 に変更すると動作しなくなります。この答えは私が必要とするものに近すぎます: リンク
c - EAGAINの後に読み取りを強制的にブロックしますか?
読み取り用に開いているファイル記述子がありますが、これは非ブロッキングである可能性があります。私がする必要があるのは、EOFに達するまですべてのデータを読み取り、そのデータを書き込み可能なファイル記述子に書き込むことです。このコピーを実行するプロセスは、周囲で何が起こっているかを「認識」していないため、データを待っている間は何か便利なことができるとは思いません。また、while
ループを使用したくerrno
ありません( EAGAIN
)無駄だと思うので。データが利用可能になるまで、コピープロセスの実行をブロックまたは一時停止する方法はありますか?
c - 大きなファイルを書き込むためだけに O_LARGEFILE が必要ですか?
大きなファイルの書き込み ( ) または大きなファイルへの追加( ) だけを行う場合、O_LARGEFILE
フラグは必要ですか?O_WRONLY
O_APPEND | O_WRONLY
私が読んだCLucene-dev メーリング リストの「 Cannot write >2gb index fileO_LARGEFILE
」というタイトルのスレッドから、大きなファイルを書き込む必要があるようですが、その議論の参加者はO_RDWR
ではなくを使用しているO_WRONLY
ため、よくわかりません。
c - O_NONBLOCK は、ファイル記述子または基になるファイルのプロパティに設定されていますか?
fcntl
、open
、read
、およびの The Open Group Web サイトで読んだことから、 がファイル記述子に設定されているかどうか、したがって、非ブロッキング I/O が記述子で使用されているかどうかは、 のプロパティである必要があるというwrite
印象を受けました。O_NONBLOCK
基になるファイルではなく、そのファイル記述子。ファイル記述子のプロパティであるということは、たとえば、ファイル記述子を複製するか、同じファイルに対して別の記述子を開く場合、一方にはブロッキング I/O を使用し、もう一方には非ブロッキング I/O を使用できることを意味します。
ただし、FIFO を試してみると、FIFO に対してブロッキング I/O 記述子と非ブロッキング I/O 記述子を同時に持つことはできないようです (したがって、O_NONBLOCK
設定されているかどうかは、基になるファイル [FIFO] のプロパティです)。 ):
これは私に考えさせます:ノンブロッキングI/O記述子とブロッキングI/O記述子を同じファイルに持つことは可能ですか?もしそうなら、それはファイルのタイプ(通常のファイル、FIFO、ブロック特殊ファイル)に依存しますか? 、キャラクタースペシャルファイル、ソケットなど)?
c - ファイル記述子からプログラムを実行する方法は?
記述子しかわからないときにファイルを実行する必要があります。ファイルへのリンクがない可能性もあるので、どういうわけか名前を見つけることはオプションではありません。すべてのexecve()、execvp()などの関数はファイル名を取ります。dlopen()にも名前が付けられます。
醜い解決策(ファイルの読み取りや関数ポインタの呼び出しなど)は問題ありません。