Я пытаюсь создать архив TAR из моей программы, а затем открываю архив для дальнейшей обработки.У меня задержка в 2 секунды между звонками system()
и open()
.Пока все работает нормально, но я не уверен, зачем нужна задержка в 2 секунды или если это правильное решение.
Без задержки я получаю код ошибки 2 (ENOENT "Нет такого файла или каталога") из open()
звонка.Моей первой мыслью было, что файловая система не обновляется достаточно быстро, и open()
не может найти файл.Но что, если система действительно занята?Нужна ли более длительная задержка?Должен ли я цикл до open()
успеха вместо задержки?Проблема в чем-то совершенно ином?
ОБНОВЛЕНИЕ
Корневой файловой системой является EXT2./tmp
монтируется в ОЗУ с использованием TMPFS.Я использую 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