Запустить программу из своей программы и прочитать ее вывод в командную строку - 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, если все выполнено успешно.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д