Condividi tramite


_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_errliste _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

Vedi anche

Processo e controllo dell'ambiente
_pclose
_pipe