запуск нескольких функций execve в одном файле С++

Мне нужно написать программу c++, которая «подсчитывает количество строк, слов и количество байтов в текстовом файле», и все это должно быть в новой строке.

Мне нужно использовать команду wc в моей программе на С++. Мне удалось получить количество строк:

char *envp[] = {NULL};
char *command[] = {"wc", "-l", filename.c_str(), NULL};
execve("/usr/bin/wc", command, envp);

После приведенных выше утверждений у меня есть одно, которое заменяет «-l» на «-w» и так далее. Но моя программа заканчивается сразу после первого оператора execve().

Как заставить все мои операторы выполняться даже после оператора execve()?

NB: Это будет мой первый запуск системных команд с помощью программы на C++.

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


person Ofentse    schedule 11.08.2018    source источник
comment
char *command[] = {"wc", "-l", filename.c_str(), NULL}; не является допустимой инициализацией, wc может быть char const *, но не char *   -  person user7860670    schedule 11.08.2018
comment
Я выполнил приведение типа в массиве (char *)wc. Я решил исключить все приведения типов из кода, потому что с ними у меня проблемы.   -  person Ofentse    schedule 11.08.2018
comment
Этот тип приведения также недействителен, потому что указатели команд строки, на которые указывают указатели, должны быть модифицируемыми.   -  person user7860670    schedule 11.08.2018
comment
Прочтите Продвинутое программирование для Linux или что-то более новое, а затем syscalls(2) и связанные man страницы. Прочтите также Операционные системы: три простых шага для хороший обзор про операционки.   -  person Basile Starynkevitch    schedule 11.08.2018
comment
спасибо за ссылки.   -  person Ofentse    schedule 12.08.2018


Ответы (1)


execve заменяет текущий исполняемый образ на указанный и поэтому никогда не возвращается в случае успеха. Если вы хотите продолжить выполнение основной программы, вам нужно сначала fork. Или используйте что-то столь же скучное, как функция system.

person user7860670    schedule 11.08.2018
comment
Спасибо. Как я уже упоминал, я относительно новичок в этом, я проведу некоторое исследование о fork(). Спасибо. - person Ofentse; 11.08.2018