Запустить программу из своей программы и прочитать ее вывод в командную строку - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Вопрос должен быть простым, но нигде не могу найти ответ. Функция system этого не позволяет. Есть ли такая возможность, как, например, в функции exec в PHP. Операционная сиcтема Linux.

Решение задачи: «Запустить программу из своей программы и прочитать ее вывод в командную строку»

textual
Листинг программы
  1. /* стандарт ANSI C 99 с целью объявления переменных, где удобнее,
  2. к сути программы отношения не имеет.
  3. Читает построчно вывод утилиты cat с переданным ей своим первым параметром */
  4. #define _XOPEN_SOURCE
  5.  
  6. #include <stdio.h>
  7. #include <string.h>
  8. #include <assert.h>
  9.  
  10. #define PROGRAM_NAME argv[0]
  11. #define FILE_NAME argv[1]
  12.  
  13. int main(int argc, char ** argv) {
  14.     if ( argc < 2 ) {
  15.         printf("USAGE: %s file_name\n", PROGRAM_NAME);
  16.         return -1;
  17.     }
  18.    
  19.     char cmd[BUFSIZ] = "/bin/cat ";
  20.     strcat(cmd, FILE_NAME);
  21.    
  22.     FILE * pip = popen(cmd, "r");
  23.     assert(pip);
  24.    
  25.     char buf[BUFSIZ];
  26.     while ( fgets(buf, BUFSIZ, pip) )
  27.         printf("%s", buf);
  28.    
  29.     pclose(pip);
  30.    
  31.     return 0;
  32. }

Объяснение кода листинга программы

  1. Стандарт ANSI C 99 используется для объявления переменных там, где это удобно. Это не имеет отношения к сути программы.
  2. Программа использует функции из библиотеки stdio.h для ввода и вывода данных.
  3. Переменная PROGRAM_NAME содержит имя программы, переданное в командной строке.
  4. Переменная FILE_NAME содержит имя файла, переданное в командной строке.
  5. Если количество аргументов в командной строке меньше 2, программа выводит сообщение об использовании и завершает работу.
  6. Создается строка cmd, которая содержит команду для выполнения (cat имя_файла).
  7. Используется функция popen для запуска команды и получения ее вывода.
  8. Выполняется проверка, что файловый дескриптор, полученный от функции popen, не равен NULL.
  9. Создается буфер buf для хранения вывода команды.
  10. В цикле while с помощью функции fgets считываются строки из файла, связанного с файловым дескриптором pip, и выводятся на экран.
  11. Используется функция pclose для закрытия файлового дескриптора, полученного от функции popen.
  12. Программа возвращает 0, если все выполнено успешно.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.875 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы