Вопрос по redhat, zip, c++, unzip –  или даже библиотеку, использованную для сборки 'unzip', если она бесплатна, но там должно быть много загрузок), а затем используйте ее, и если вам нужно сделать оба параллельно, тогда представьте потоки. Немного работы, я согласен, но на практике это лучше, чем использование вызова system ().

1

ужно распаковать файл во время работы программы на C ++ (как описано вОжидание завершения распаковки перед продолжением выполнения кода C ++ на компьютере RedHat)

Для этого я сейчас делаю что-то вроде этого:

system("unzip /usr/bin/File/ZippedFile.gz -d /usr/bin/File/)

Который без проблем распаковывает "/usr/bin/File/ZippedFile.gz" в "/ usr / bin / File / ZippedFile".

Это отлично работает. Однако я заметил, что многие люди, кажется, говорят, что используя

system()

это табу.

Людям не нравится это из-за безопасности и системных ресурсов (как обсуждено здесь:http://www.cplusplus.com/forum/articles/11153/).

Но поскольку я хочу, чтобы программа ожидала завершения распаковки, существует ли жизнеспособная альтернатива?

Ваш Ответ

2   ответа
4

zlib, илиboost::iostream GZIP объект.

Система не ошибаетсякак таковой, но вы также можете написать замену, которая не использует оболочку сfork, exec, wait а такжеmkstemp, Это громоздко, хотя. С помощьюboost::gzip_decompressor лучший вариант C ++ для меня, если вы распаковываете отдельные файлы. Форкинг и друзья могут быть лучше, если вам нужно распаковать каталог. Обязательно прочитайте оmkstemp.

Для ускоренного курса по семейству fork и exec:http://www.yolinux.com/TUTORIALS/ForkExecProcesses.html

Для примера использованияwait для вашего ребенка прекратить:http://support.sas.com/documentation/onlinedoc/sasc/doc/lr2/wait.htm

Для справки о создании временного каталога:http://www.gnu.org/s/hello/manual/libc/Temporary-Files.html

0

это плохая практика по разным причинам (безопасность, переносимость и т. Д.). Вы должны получить архив zip (поиск в Google дает мне что-то вродеhttp://www.firstobject.com/easy-zlib-c++-xml-compression.htm или даже библиотеку, использованную для сборки 'unzip', если она бесплатна, но там должно быть много загрузок), а затем используйте ее, и если вам нужно сделать оба параллельно, тогда представьте потоки. Немного работы, я согласен, но на практике это лучше, чем использование вызова system ().

Похожие вопросы