プログラムからTARアーカイブを作成し、アーカイブを開いてさらに処理しようとしています。system()
呼び出しとの間に2秒の遅延がありopen()
ます。これまでのところ、問題なく動作しますが、なぜ2秒の遅延が必要なのか、それが正しい解決策であるのかはわかりません。
遅延なしで、呼び出しからエラーコード2(ENOENT "No such file or directory")を受け取りますopen()
。私の最初の考えは、ファイルシステムがそれ自体を十分に速く更新してopen()
おらず、ファイルを見つけることができなかったということでした。しかし、システムが本当にビジーな場合はどうなるでしょうか。もっと長い遅延が必要ですか?open()
遅延ではなく成功するまでループする必要がありますか?問題はまったく違うものですか?
UPDATE
ルートファイルシステムはEXT2です。/tmp
TMPFSを使用してRAMにマウントされます。アーカイブの内容を抽出するのではなく、アーカイブを作成するtar
ために使用しています。基本的に、私のプログラムはいくつかのログファイルのアーカイブを作成し、それらをネットワーク経由で送信することになっています(そのため、作成後にアーカイブを開きます)。
int return_value = system("/bin/tar -czf /tmp/logs.tar.gz /var/log/mylogs.log* &> /dev/null");
// error checks on return_value as described here: http://linux.die.net/man/2/wait
if(return_value != 0) {
return return_value;
}
//usleep(2000000);
return_value = open("/tmp/logs.tar.gz", O_RDONLY | O_LARGEFILE, 0);
// success or failure depending on whether there's a delay or not