2009-07-06 15 views
7

ファイルがCで開いているかどうかを確認するにはどうすればよいですか?私はもっ​​と技術的な質問は、既存のファイルへの参照の数を取得し、それを安全に開くことができるかどうかを判断する方法です。ファイルがLinuxのC言語の別の場所で開いているかどうかを確認するにはどうすればよいですか?

私が実装しているアイディアはファイルキューです。いくつかのファイルをダンプすると、私のコードがファイルを処理します。私は、プロデューサがファイル記述子を閉じるまで処理を開始したくありません。

すべてがLinuxで行われています。

おかげで、 Chenz

答えて

5

情報は、(あなたがthorughの/ proc/*/FD あなたはのいずれかとしたほうが良いと思います検索する必要があるだろう多くの作業であることを掘る:[名前の変更、一時に保存

  • 。あなたのファイルを一時的なファイル名やディレクトリに書き込むか、書き込んだらアプリの読み込み先のディレクトリに名前を変更してください。ファイルの書き方が完了したら、fooという名前の空のファイルを作成します。foo.finished。ファイルの処理時に* .finishedの存在を探します。
  • 書き込み中にファイルをロックすると、ファイルを読み取ることは、書き込み側がロックを解除するまでブロックされます。 flock/lockfの機能を参照してください。しかし、両方ともリーダーとライターの両方がロックする必要があります。
+0

私は、2番目の提案が私の状況に最適であるという結論に達しました。ありがとう! –

3

私は純粋なCでこれを行うにはどのような方法は、(それがクロスプラットフォームではありません)があるとは思いません。

事前に使用しているファイルが分かっている場合は、開封時にinotifyを使用して通知することができます。

+1

はい、inotifyを使用して、ファイルが閉じられたことを検出することもできます。 – zvrba

0

Cにはファイルを処理する機能がありますが、情報を得るための機能はありません。ポータブルCでは、あなたが行うことができる唯一のことは、希望の方法でファイルを開き、それが動作するかどうかを確認することです。

0

一般的には、さまざまな理由で(たとえば、ファイルが別のユーザーと開いているかどうかはわかりません)、そのようにすることはできません。

ファイルを開くプロセスを制御することができますし、ファイルをロックすることで衝突を回避しようとしている場合(Linux上で多くのライブラリがあることを行うためにあります)

0

はlsofをコマンドを使用します。 (リストオープンファイル)。

0

プロデューサとコンシューマの両方を管理している場合は、flock()のlockf()を使用してファイルをロックできます。

0

現在開いているすべてのファイルを表示するほとんどのディストリビューションにはlsofコマンドがあります。ファイルが同じディレクトリにあるか、または認識可能な名前パターンを持っている場合はgrepの出力を無効にすることができます。

関連する問題