Книга: Разработка приложений в среде Linux. Второе издание

14.5.1. Использование подпроцесса

14.5.1. Использование подпроцесса

Самый старый метод универсализации предусматривает запуск оболочки в качестве дочернего процесса и указание ей универсализировать файловые имена. Стандартная функция popen() (см. главу 10) упрощает этот метод — просто запустите команду ls *.с с помощью popen() и прочитайте результат. Этот подход может показаться несколько упрощенным, но все же он обеспечивает переносимое решение проблемы универсализации (вот почему приложения вроде Perl используют его).

Ниже приведена программа, которая универсализирует все аргументы и отображает все совпадения.

 1: /* popenglob.c */
 2:
 3: #include <stdio.h>
 4: #include <string.h>
 5: #include <sys/wait.h>
 6: #include <unistd.h>
 7:
 8: int main(int argc, const char ** argv)
 9:  char buf[1024];
10:  FILE * ls;
11:  int result;
12:  int i;
13:
14:  strcpy(buf, "ls");
15:
16:  for (i = 1; i < argc; i++) {
17:   strcat(buf, argv[i]);
18:   strcat(buf, " ");
19:  }
20:
21:  ls = popen(buf, "r");
22:  if (!ls) {
23:   perror("popen");
24:   return 1;
25:  }
26:
27:  while (fgets(buf, sizeof(buf), ls))
28:   printf("%s", buf);
29:
30:  result = pclose(ls);
31:
32:  if (!WIFEXITED(result)) return 1;
33:
34:  return 0;
35: }

Оглавление книги


Генерация: 1.719. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз