Книга: Программирование для Linux. Профессиональный подход

Листинг 5.9. (popen.c) Использование функций popen() и pclose()

Листинг 5.9. (popen.c) Использование функций popen() и pclose()

#include <stdio.h>
#include <unistd.h>
int main() {
 FILE* stream = popen("sort", "w");
 fprintf(stream, "This is a test.n");
 fprintf(stream, "Hello, world.n");
 fprintf(stream, "My dog has fleasn");
 fprintf(stream, "This program is great.n");
 fprintf(stream, "One fish, two fish.n");
 return pclose(stream);
}

Функция popen() создает дочерний процесс, в котором выполняется команда sort. Один этот вызов заменяет вызовы функций pipe(), fork(), dup2() и execlp(). Второй аргумент, "w", указывает на то, что текущий процесс хочет осуществлять запись в дочерний процесс. Функция popen() возвращает указатель на один из концов канала; второй конец соединяется со стандартным входным потоком дочернего процесса. Функция pclose() закрывает входной поток дочернего процесса, дожидается его завершения и возвращает код статуса.

Первый аргумент функции popen() является командой интерпретатора, выполняемой в подпроцессе /bin/sh. Интерпретатор просматривает переменную среды PATH, чтобы определить, где следует искать команду. Если второй аргумент равен "r", функция возвращает указатель на стандартный выходной поток дочернего процесса, чтобы программа могла читать данные из него. Если второй аргумент равен "w", функция возвращает указатель на стандартный входной поток дочернего процесса, чтобы программа могла записывать данные в него. В случае ошибки возвращается пустой указатель.

Функция pclose() закрывает поток, указатель на который был возвращен функцией popen(), и дожидается завершения дочернего процесса.

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


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