mark.zlatoust.ru Послать письмо Webmaster-у Web-Master © Бернадинер Марк 

Златоуст.Ru

 

 

POPEN(3S)                                             POPEN(3S)

НАЗВАНИЕ 
        popen,  pclose  -  создание  и  ликвидация канала между
        программой и командой

СИНТАКСИС 
        #include 
        
        FILE *popen (command, type)
        char *command, *type;
        
        int pclose (stream)
        FILE *stream;

ОПИСАНИЕ 
        Аргументами функции popen являются указатели на цепочки
        символов  с  завершающим нулевым байтом. Первая из них,
        command, содержит команду shell'а, а вторая задает  ре-
        жим  ввода/вывода:  "r"  для  чтения  и "w" для записи.
        Функция popen создает канал между вызывающей программой
        и указанной командой. Возвращаемое значение - это  ука-
        затель  на поток. Если режим равен "w", то можно писать
        на стандартный ввод команды, выводя в созданный  поток.
        Если  режим  равен "r", то можно читать со стандартного
        вывода команды, вводя из созданного потока.

        Поток,  открытый  с помощью popen, должен быть закрыт с
        помощью функции pclose, которая ожидает завершения  за-
        пущенного  процесса выполнения команды и выдает код его
        завершения.

        Поскольку открытые файлы разделяются, команда с режимом
        "r" может быть использована как входной фильтр,  а  ко-
        манда с режимом "w" - как выходной фильтр.

ПРИМЕР 
        1. Типичным является следующий пример:

             char *cmd = "ls *.c";
             FILE *ptr;
             if ((ptr = popen (cmd, "r")) != NULL)
               while (fgets (buf, n, ptr)) != NULL)
                 (void) printf ("%s", buf);

        На стандартный вывод будут записаны имена всех файлов с
        расширением .c, принадлежащих текущему каталогу.

СМ. ТАКЖЕ 
        pipe(2),  wait(2),  fclose(3S),  fopen(3S),  stdio(3S),
        system(3S).

ДИАГНОСТИКА 
        Функция popen возвращает пустой указатель (NULL),  если
        файл или процесс не могут быть созданы.

        Функция  pclose возвращает -1, если поток не ассоцииро-
        ван с командой посредством popen.

ПРЕДОСТЕРЕЖЕНИЯ 
        Если требуется, чтобы вызывающий процесс и процесс, по-
        рождаемый по popen, одновременно читали  или  писали  в
        общие  файлы, то нельзя при этом пользоваться буферизо-
        ванным вводом/выводом, так как данные в буферах переме-
        шаются непредсказуемо. Проблемы с выходным фильтром мо-
        гут быть решены путем аккуратного выталкивания  буферов
        с помощью функции fflush [см. fclose(3S)].



 

 

Бернадинер Марк Абрамович

Мое резюме

Компьютерная страничка

Ресурсы сети

Фотоальбом

 

 

 

mark.zlatoust.ru Послать письмо Webmaster-у Web-Master © Бернадинер Марк