_popen
, _wpopen
Создает канал и выполняет команду.
Внимание
Этот API нельзя использовать в приложениях, выполняемых в среде выполнения Windows. Дополнительные сведения: Функции CRT, которые не поддерживаются в приложениях универсальной платформы Windows.
Синтаксис
FILE *_popen(
const char *command,
const char *mode
);
FILE *_wpopen(
const wchar_t *command,
const wchar_t *mode
);
Параметры
command
Команда для выполнения.
mode
Режим возвращенного потока.
Возвращаемое значение
Возвращает поток, связанный с одним концом созданного канала. Другой конец канала связан со стандартным инициированным потоком ввода и вывода команд. Функции возвращают ошибку NULL
. Если ошибка вызвана недопустимым параметром, errno
установите значение EINVAL
. Сведения о допустимых режимах см. в разделе "Примечания".
Сведения об этих и других кодах ошибок см. в разделе errno
, _doserrno
_sys_errlist
и _sys_nerr
.
Замечания
Функция _popen
создает канал. Затем она асинхронно выполняет сложенную копию обработчика команд и используется command
в качестве командной строки. Строка mode
символов указывает тип запрошенного доступа, как показано ниже.
Режим доступа | Description |
---|---|
"r " |
Вызывающий процесс может считывать инициируемый поток вывода команд с помощью возвращенного потока. |
"w " |
Вызывающий процесс может записывать инициируемый поток ввода команд с помощью возвращенного потока. |
"b " |
Открыть в двоичном режиме. |
"t " |
Открыть в текстовом режиме. |
Примечание.
При использовании в программе Windows функция _popen
возвращает недопустимый указатель на файл, в результате чего программа перестает отвечать на запросы в течение неограниченного времени. Функция _popen
работает соответствующим образом в консольном приложении. Сведения о создании приложения Windows, которое перенаправляет входные и выходные данные, см. в статье "Создание дочернего процесса с перенаправленными входными и выходными данными " в пакете SDK для Windows.
_wpopen
— это версия _popen
с расширенными символами; аргумент path
для _wpopen
— строка расширенных символов. Поведение_wpopen
и _popen
идентично в противном случае.
По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это поведение, см . статью "Глобальное состояние" в CRT.
Сопоставления подпрограмм универсального текста
Tchar.h рутина |
_UNICODE и _MBCS не определен |
_MBCS Определенные |
_UNICODE Определенные |
---|---|---|---|
_tpopen |
_popen |
_popen |
_wpopen |
Требования
Маршрут | Обязательный заголовок |
---|---|
_popen |
<stdio.h> |
_wpopen |
<stdio.h> или <wchar.h> |
Дополнительные сведения о совместимости см. в разделе Совместимость.
Библиотеки
Все версии библиотек времени выполнения языка C.
Пример
// popen.c
/* This program uses _popen and _pclose to receive a
* stream of text from a system process.
*/
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char psBuffer[128];
FILE* pPipe;
/* Run DIR so that it writes its output to a pipe. Open this
* pipe with read text attribute so that we can read it
* like a text file.
*/
if ((pPipe = _popen("dir *.c /on /p", "rt")) == NULL)
{
exit(1);
}
/* Read pipe until end of file, or an error occurs. */
while (fgets(psBuffer, 128, pPipe))
{
puts(psBuffer);
}
int endOfFileVal = feof(pPipe);
int closeReturnVal = _pclose(pPipe);
if (endOfFileVal)
{
printf("\nProcess returned %d\n", closeReturnVal);
}
else
{
printf("Error: Failed to read the pipe to the end.\n");
}
}
В этом выходных данных предполагается, что в текущем каталоге есть только один файл с расширением .c
имени файла.
Volume in drive C is CDRIVE
Volume Serial Number is 0E17-1702
Directory of D:\proj\console\test1
07/17/98 07:26p 780 popen.c
1 File(s) 780 bytes
86,597,632 bytes free
Process returned 0