_popen
, _wpopen
Erstellt eine Pipe und führt einen Befehl aus.
Wichtig
Diese API kann nicht in Anwendungen verwendet werden, die in Windows-Runtime ausgeführt werden. Weitere Informationen finden Sie im Artikel CRT functions not supported in Universal Windows Platform apps (In Apps für die universelle Windows-Plattform nicht unterstützte CRT-Funktionen).
Syntax
FILE *_popen(
const char *command,
const char *mode
);
FILE *_wpopen(
const wchar_t *command,
const wchar_t *mode
);
Parameter
command
Befehl, der ausgeführt werden soll.
mode
Modus des zurückgegebenen Streams.
Rückgabewert
Gibt einen Stream zurück, der einem Ende der erstellten Pipe zugeordnet ist. Das andere Ende der Pipe ist der Standardeingabe oder Standardausgabe des erzeugten Befehls zugeordnet. Die Funktionen geben einen Fehler zurück NULL
. Wenn der Fehler durch einen ungültigen Parameter verursacht wird, errno
wird auf EINVAL
. Gültige Modi können Sie dem Abschnitt mit den Hinweisen entnehmen.
Informationen zu diesen und anderen Fehlercodes finden Sie unter , , _doserrno
, _sys_errlist
und _sys_nerr
.errno
Hinweise
Die _popen
Funktion erstellt eine Pipe. Anschließend wird asynchron eine spawnierte Kopie des Befehlsprozessors ausgeführt und als Befehlszeile verwendet command
. Die Zeichenfolge mode
gibt den angeforderten Zugriffstyp wie folgt an.
Zugriffsmodus | Beschreibung |
---|---|
"r " |
Der aufrufende Prozess kann die Standardausgabe des erzeugten Befehls mit dem zurückgegebenen Stream lesen. |
"w " |
Der aufrufende Prozess kann die Standardeingabe des erzeugten Befehls mit dem zurückgegebenen Stream schreiben. |
"b " |
Öffnen im binären Modus. |
"t " |
Öffnen im Textmodus. |
Hinweis
Wenn die _popen
-Funktion in einem Windows-Programm verwendet wird, gibt sie einen ungültigen Dateizeiger zurück, der dafür sorgt, dass das Programm für unbestimmte Zeit nicht mehr reagiert. _popen
funktioniert in einer Konsolenanwendung. Informationen zum Erstellen einer Windows-Anwendung, die Eingabe und Ausgabe umleitet, finden Sie unter Erstellen eines untergeordneten Prozesses mit umgeleiteter Eingabe und Ausgabe im Windows SDK.
_wpopen
ist eine Breitzeichenversion von _popen
. Das path
-Argument für _wpopen
ist eine Breitzeichenfolge. _wpopen
und _popen
verhalten sich andernfalls identisch.
Standardmäßig gilt der globale Zustand dieser Funktion für die Anwendung. Wie Sie dieses Verhalten ändern, erfahren Sie unter Globaler Status in der CRT.
Mapping generischer Textroutinen
Tchar.h -Routine |
_UNICODE und _MBCS nicht definiert |
_MBCS definiert |
_UNICODE definiert |
---|---|---|---|
_tpopen |
_popen |
_popen |
_wpopen |
Anforderungen
Routine | Erforderlicher Header |
---|---|
_popen |
<stdio.h> |
_wpopen |
<stdio.h> oder <wchar.h> |
Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.
Libraries
Alle Versionen der C-Laufzeitbibliotheken.
Beispiel
// 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");
}
}
Bei dieser Ausgabe wird davon ausgegangen, dass nur eine Datei im aktuellen Verzeichnis vorhanden ist, die über eine .c
Dateinamenerweiterung verfügt.
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