_popen
, _wpopen
Crea una pipe ed esegue un comando.
Importante
Non è possibile usare questa API nelle applicazioni eseguite in Windows Runtime. Per altre informazioni, vedere Funzioni CRT non supportate nelle app della piattaforma UWP (Universal Windows Platform).
Sintassi
FILE *_popen(
const char *command,
const char *mode
);
FILE *_wpopen(
const wchar_t *command,
const wchar_t *mode
);
Parametri
command
Comando da eseguire.
mode
Modalità del flusso restituito.
Valore restituito
Restituisce un flusso associato a un'estremità della pipe creata. L'altra estremità della pipe viene associata all'input standard o all'output standard del comando generato. Le funzioni restituiscono NULL
un errore. Se l'errore è causato da un parametro non valido, errno
è impostato su EINVAL
. Per informazioni sulle modalità valide, vedere la sezione Note.
Per informazioni su questi e altri codici di errore, vedere errno
, _doserrno
, _sys_errlist
e _sys_nerr
.
Osservazioni:
La _popen
funzione crea una pipe. Esegue quindi in modo asincrono una copia generato del processore di comandi e usa command
come riga di comando. La stringa mode
di caratteri specifica il tipo di accesso richiesto, come indicato di seguito.
Modalità di accesso | Descrizione |
---|---|
"r " |
Il processo chiamante può leggere l'output standard del comando generato usando il flusso restituito. |
"w " |
Il processo chiamante può scrivere nell'input standard del comando generato usando il flusso restituito. |
"b " |
Apertura in modalità binaria. |
"t " |
Apertura in modalità testo. |
Nota
Se usata in un programma Windows, la funzione _popen
restituisce un puntatore di file non valido, a causa del quale il programma smette di rispondere indefinitamente. _popen
funziona correttamente in un'applicazione console. Per creare un'applicazione Windows che reindirizza input e output, vedere Creazione di un processo figlio con input e output reindirizzati in Windows SDK.
_wpopen
è una versione a caratteri wide di _popen
; l'argomento path
in _wpopen
è una stringa di caratteri wide. In caso contrario,_wpopen
e _popen
si comportano in modo identico.
Per impostazione predefinita, lo stato globale di questa funzione è limitato all'applicazione. Per modificare questo comportamento, vedere Stato globale in CRT.
Mapping di routine di testo generico
Tchar.h routine |
_UNICODE e _MBCS non definito |
_MBCS definito |
_UNICODE definito |
---|---|---|---|
_tpopen |
_popen |
_popen |
_wpopen |
Requisiti
Ciclo | Intestazione obbligatoria |
---|---|
_popen |
<stdio.h> |
_wpopen |
<stdio.h> oppure <wchar.h> |
Per altre informazioni sulla compatibilità, vedere Compatibility (Compatibilità).
Librerie
Tutte le versioni delle librerie di runtime C.
Esempio
// 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");
}
}
Questo output presuppone che nella directory corrente sia presente un solo file con estensione di .c
file.
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