[<<Previous Entry] [^^Up^^] [Next Entry>>] [Menu] [About The Guide]
 Библиотечные функции - Пример - who | sort

Этот пример  демонстрирует  использование  popen(3)  и  pclose(3)  для
реализации who | sort.

5         Эта строка описывает указатели на входной и выходной файлы.

6         Определяется буфер  ввода и  вывода в виде массива символов.
          Заметьте, что BUFSIZ определен в файле stdio.h.

8-9       Здесь создаются указатели файлов ввода и вывода.

11-12     Здесь символьные  данные копируются из вывода команды who(1)
          на ввод  команды sort(1).  Цикл  ввода/вывода  прекращается,
          когда больше  нет  входных  данных.  Это  происходит,  когда
          завершается who(1).

14-15     Наконец,  закрываются   указатели  на  файлы.  Порядок  этих
          закрытий  важен,  потому  что  sort(1)  начинает  сортировку
          только после того, как увидит конец стандартного ввода.

Заметьте,  насколько   эта  программа   проще   предыдущего   примера,
использующего системные вызовы.

Эта программа работает так:
$ whos1
anil      tty41     May  8    08:42
bern      tty26     May  8    18:14
bern      xt082     May  8    14:39
console   console   May  5    22:47
ipd       tty31     May  8    07:46

Файл: whos1.c
              БИБЛИОТЕЧНЫЕ ФУНКЦИИ - ПРИМЕР - who | sort

 1   #include <stdio.h>
 2
 3   main()
 4   {
 5   FILE *fpin, *fpout;
 6   char line[BUFSIZ];
 7
 8   fpin = popen("who", "r");
 9   fpout = popen("sort", "w");
10
11   while(fgets(line,BUFSIZ,fpin) != (char *)NULL)
12   fputs(line, fpout);
13
14   pclose(fpin);
15   pclose(fpout);
16   }