_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 EINVAL
wartość . 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_errlist
i _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ą ; _popen
argument 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