Книга: Программирование для 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()
, и дожидается завершения дочернего процесса.
- popen
- 5.4.4. Функции popen() и pclose()
- 4.5. Функции popen и pclose
- Листинг 10.1. (simpleid.c) Отображение идентификаторов пользователя и группы
- Восстановление с использованием инструмента gbak
- Типы страниц и их использование
- Использование констант
- Использование переменной окружения ISC_PATH
- Использование сервера Yaffil внутри процесса
- Использование CAST() с типами дата
- Использование типов содержимого и столбцов
- Вызов хранимых процедур InterBase с использованием стандартного синтаксиса ODBC