использование системных вызовов linux и управления файлами и папками в c ++

Пишу программу на C ++, вот задача:

У меня есть string proj_Name и другой строковый адрес, и у меня есть папка с именем root рядом с моей программой. Теперь мне нужно создать папку с именем proj_name в корневой папке и скопировать все с адреса в эту новую папку.

При использовании терминала Linux для создания каталога или копирования файла я набираю mkdir proj_name или cp [src] [dst]. Мне сказали, что для использования команд терминала в моей программе я должен использовать системные вызовы, но я понятия не имею, что это за системный вызов и как я могу его использовать.

В дополнение к этому я могу создать еще несколько папок проекта в корне, и у меня должен быть доступ к каждой из них в моей программе.

Как я могу использовать дизайн ООП для обработки этих файлов и папок (например, я получаю proj_name от пользователя, и мне нужно найти соответствующую папку в корневом каталоге, а затем выполнить некоторые задачи для этого проекта)?

Безусловно, у меня должен быть _project_ class, но я не знаю, какие переменные-члены ему нужны. Кроме того, мне сказали, что я могу копировать папки рекурсивным образом, например: скопируйте папку-> откройте ее-> для каждого файла-> скопируйте файл-> для каждой папки выполните этот алгоритм с самого начала.

Кто-нибудь может мне помочь?

Заранее спасибо.


person Homie    schedule 18.05.2012    source источник
comment
man mkdir показывает документацию для команды оболочки. man 2 mkdir предоставляет документацию по системному вызову.   -  person William Pursell    schedule 18.05.2012
comment
Также обратите внимание, что это системный вызов mkdir, а не mkfolder. Перестань называть это папкой!   -  person William Pursell    schedule 18.05.2012


Ответы (1)


Я предполагаю, что это домашнее задание, хотя вы не указываете, что это так. На ум приходят три решения:

  1. Используйте вызов system() для создания строк командной строки и их выполнения. Честно говоря, это довольно ужасно по ряду причин: (i) сложно проверить, работает ли команда, (ii) легко вставить вредоносный код (т.е. взломать) и (iii) он очень специфичен для платформы.

  2. Вы можете, как вы упомянули, использовать системные вызовы для копирования файлов, создания каталогов и т. Д. Если вы работаете в UNIX, вы можете прочтите этот вопрос, который может помочь. Опять же, недостатком здесь будет то, что он очень специфичен для платформы.

  3. Наконец, вы можете использовать общую библиотеку, такую ​​как Увеличьте файловую систему, которая является лучшим (из этих трех решений), но может не сильно вам помочь, если вам нужно продемонстрировать, что вы можете моделировать файловую систему в объектно-ориентированном стиле. Однако просмотр API может дать вам некоторые подсказки относительно того, как различные объекты могут сочетаться друг с другом в объектно-ориентированном дизайне.

person Component 10    schedule 18.05.2012
comment
Я согласен с тем, что использование библиотечной функции system(3) - не лучшая идея, но я не уверен, что она зависит от платформы. С осторожностью и предостережениями (например, $PATH начиная с /bin:/usr/bin и используя полные пути, например, /bin/mkdir, а не просто mkdir) вы можете использовать указанные в Posix команды довольно переносимым способом. - person Basile Starynkevitch; 19.05.2012