Поделиться через


_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

См. также

Управление процессами и средой
_pclose
_pipe