2016-07-12 2 views
0

私は特定のディレクトリにたくさんのファイルを作成するプログラムを実行しています。ファイルを作成するのを見たいと思っています。新しいファイルを反映するようにアップデートしていませんか?

私は2つのターミナルウィンドウを開き、そのうちの1つ(ターミナルAと呼ぶ)をプログラムのディレクトリ(それを実行できる)にコピーし、もう1つ(ターミナルB)を出力ファイルが書き込まれるディレクトリこの出力ディレクトリは空になります)。ターミナルAの出力ディレクトリにあるファイルtouchが端末Bのlsに書き込まれると、新しいファイルが表示されます。これはすべて正常に動作します。私は端末Aでプログラムを実行した後に

はしかし、新しいファイルはどれも、私は不思議なことに、端末Bにlsを行うときに、私は、端末Bで、その後cd .lsを行う場合は、新しいファイルを入手してください現れませんリストされている。

この現象の原因は何ですか?また、回避できますか?

編集:ファイルの書き込みに関する情報。

  • 一部は、OpenCVを使用してPython 2でcv2.imwrite(...)を呼び出して書かれています。
  • 一部はC++でofstreamによって書かれています。
+0

[mcve](あなたのコード)を含めることができますか?私たちは難しい事実を持たないと推測することしかできません。 –

+0

残念ながら、私はこのバグを他の何ものでも再現できませんが、私が実行しているこのプログラムは大規模で機密なコード集です。 – vijrox

+1

その後、この*バグ*を再現することができなくなります。これがクロージャの理由です。スクリプトで使用されている適切なコマンドを少なくともリストできますか? –

答えて

2

この一連のイベントは、この問題を再現しているようです。

image

、端末Aでのあなたのプログラムは、おそらく、端末Bの現在のディレクトリを削除し、同じ名前で再作成するので、lsはもともとcd「末端Bのdoesnによってdをして、その特定のディレクトリので、動作しません。もう存在しない。ただし、cd .は、(今)再作成されたディレクトリに移動します。このディレクトリでは、lsが再び動作します。

+0

これはまさにそれが起こっているように見える - ありがとう! – vijrox

2

これは、2番目のディレクトリが削除されて再作成された場合に発生します。 ディレクトリが削除されても、それを現在のディレクトリとして持つプロセスもありますが、ファイル記述子は開いたままになります。lsには古いコンテンツが表示されます。 cd .を実行すると、存在しないディレクトリのディスクリプタを閉じてもう一度開くと、新しいコンテンツが表示されます。

関連する問題