Запустить программу из своей программы и прочитать ее вывод в командную строку - C (СИ)
Формулировка задачи:
Вопрос должен быть простым, но нигде не могу найти ответ. Функция system этого не позволяет. Есть ли такая возможность, как, например, в функции exec в PHP. Операционная сиcтема Linux.
Решение задачи: «Запустить программу из своей программы и прочитать ее вывод в командную строку»
textual
Листинг программы
- /* стандарт ANSI C 99 с целью объявления переменных, где удобнее,
- к сути программы отношения не имеет.
- Читает построчно вывод утилиты cat с переданным ей своим первым параметром */
- #define _XOPEN_SOURCE
- #include <stdio.h>
- #include <string.h>
- #include <assert.h>
- #define PROGRAM_NAME argv[0]
- #define FILE_NAME argv[1]
- int main(int argc, char ** argv) {
- if ( argc < 2 ) {
- printf("USAGE: %s file_name\n", PROGRAM_NAME);
- return -1;
- }
- char cmd[BUFSIZ] = "/bin/cat ";
- strcat(cmd, FILE_NAME);
- FILE * pip = popen(cmd, "r");
- assert(pip);
- char buf[BUFSIZ];
- while ( fgets(buf, BUFSIZ, pip) )
- printf("%s", buf);
- pclose(pip);
- return 0;
- }
Объяснение кода листинга программы
- Стандарт ANSI C 99 используется для объявления переменных там, где это удобно. Это не имеет отношения к сути программы.
- Программа использует функции из библиотеки stdio.h для ввода и вывода данных.
- Переменная PROGRAM_NAME содержит имя программы, переданное в командной строке.
- Переменная FILE_NAME содержит имя файла, переданное в командной строке.
- Если количество аргументов в командной строке меньше 2, программа выводит сообщение об использовании и завершает работу.
- Создается строка cmd, которая содержит команду для выполнения (cat имя_файла).
- Используется функция popen для запуска команды и получения ее вывода.
- Выполняется проверка, что файловый дескриптор, полученный от функции popen, не равен NULL.
- Создается буфер buf для хранения вывода команды.
- В цикле while с помощью функции fgets считываются строки из файла, связанного с файловым дескриптором pip, и выводятся на экран.
- Используется функция pclose для закрытия файлового дескриптора, полученного от функции popen.
- Программа возвращает 0, если все выполнено успешно.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д