Udostępnij za pośrednictwem


_popen, _wpopen

Tworzy potok i wykonuje polecenie.

Ważne

Tego interfejsu API nie można używać w aplikacjach wykonywanych w środowisko wykonawcze systemu Windows. Aby uzyskać więcej informacji, zobacz Funkcje CRT nieobsługiwane w aplikacjach platforma uniwersalna systemu Windows.

Składnia

FILE *_popen(
    const char *command,
    const char *mode
);
FILE *_wpopen(
    const wchar_t *command,
    const wchar_t *mode
);

Parametry

command
Polecenie do wykonania.

mode
Tryb zwracanego strumienia.

Wartość zwracana

Zwraca strumień skojarzony z jednym końcem utworzonego potoku. Drugi koniec potoku jest skojarzony ze standardowym wejściem lub standardowym wyjściem polecenia zduplikowanego. Funkcje zwracają NULL błąd. Jeśli błąd jest spowodowany nieprawidłowym parametrem, errno jest ustawiony na EINVALwartość . Zobacz sekcję Uwagi, aby zapoznać się z prawidłowymi trybami.

Aby uzyskać informacje o tych i innych kodach błędów, zobacz errno, _doserrno, _sys_errlisti _sys_nerr.

Uwagi

Funkcja _popen tworzy potok. Następnie asynchronicznie wykonuje zduplikowaną kopię procesora poleceń i używa command jej jako wiersza polecenia. Ciąg mode znaków określa typ żądanego dostępu w następujący sposób.

Tryb dostępu opis
"r" Proces wywołujący może odczytywać standardowe dane wyjściowe polecenia zduplikowanego przy użyciu zwróconego strumienia.
"w" Proces wywołujący może zapisywać standardowe dane wejściowe polecenia zduplikowanego przy użyciu zwróconego strumienia.
"b" Otwórz w trybie binarnym.
"t" Otwórz w trybie tekstowym.

Uwaga

Jeśli jest używany w programie systemu Windows, _popen funkcja zwraca nieprawidłowy wskaźnik pliku, który powoduje, że program przestaje odpowiadać na czas nieokreślony. _popen działa prawidłowo w aplikacji konsolowej. Aby utworzyć aplikację systemu Windows, która przekierowuje dane wejściowe i wyjściowe, zobacz Tworzenie procesu podrzędnego z przekierowanymi danymi wejściowymi i wyjściowymi w zestawie Windows SDK.

_wpopen jest wersją szerokoznakową ; _popenargument to path _wpopen ciąg o szerokim znaku. _wpopen i _popen zachowywać się identycznie inaczej.

Domyślnie stan globalny tej funkcji jest zakresem aplikacji. Aby zmienić to zachowanie, zobacz Stan globalny w CRT.

Mapowania procedur tekstu ogólnego

Tchar.h rutyna _UNICODE i _MBCS niezdefiniowane _MBCS zdefiniowany _UNICODE zdefiniowany
_tpopen _popen _popen _wpopen

Wymagania

Procedura Wymagany nagłówek
_popen <stdio.h>
_wpopen <stdio.h> lub <wchar.h>

Aby uzyskać więcej informacji o zgodności, zobacz Zgodność.

Biblioteki

Wszystkie wersje bibliotek czasu wykonywania języka C.

Przykład

// 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");
    }
}

W danych wyjściowych przyjęto założenie, że w bieżącym katalogu znajduje się tylko jeden plik z .c rozszerzeniem nazwy pliku.

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

Zobacz też

Kontrola procesu i środowiska
_pclose
_pipe