_popen, _wpopen

Crée un canal et exécute une commande.

Important

Cette API ne peut pas être utilisée dans les applications qui s’exécutent dans le Windows Runtime. Pour plus d’informations, consultez Fonctions CRT non prises en charge dans les applications de la plateforme Windows universelle.

Syntaxe

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

Paramètres

command
Commande à exécuter.

mode
Mode du flux retourné.

Valeur retournée

Retourne un flux associé à une extrémité du canal créé. L’autre extrémité du canal est associée à l’entrée ou à la sortie standard de la commande générée. Les fonctions retournent NULL une erreur. Si l’erreur est due à un paramètre non valide, errno la valeur est définie EINVALsur . Consultez la section Notes pour en savoir plus sur les modes valides.

Pour plus d’informations sur ces codes d’erreur et d’autres codes d’erreur, consultez , , _sys_errlist_doserrnoet _sys_nerr.errno

Notes

La _popen fonction crée un canal. Il exécute ensuite de manière asynchrone une copie générée du processeur de commandes et utilise command comme ligne de commande. La chaîne mode de caractères spécifie le type d’accès demandé, comme suit.

Mode d’accès Description
« r » Le processus appelant peut lire la sortie standard de la commande générée en utilisant le flux retourné.
« w » Le processus appelant peut écrire dans l’entrée standard de la commande générée en utilisant le flux retourné.
« b » Ouvre en mode binaire.
« t » Ouvre en mode texte.

Remarque

Quand elle est utilisée dans un programme Windows, la fonction _popen retourne un pointeur de fichier non valide qui amène le programme à cesser de répondre indéfiniment. _popen fonctionne correctement dans une application console. Pour créer une application Windows qui redirige l’entrée et la sortie, consultez Création d’un processus enfant avec entrée et sortie redirigées dans le Kit de développement logiciel (SDK) Windows.

_wpopen est une version à caractères larges de _popen; l'argument path de _wpopen est une chaîne à caractères larges. Sinon,_wpopen et _popen se comportent de la même façon.

Par défaut, l’état global de cette fonction est limité à l’application. Pour modifier ce comportement, consultez État global dans le CRT.

Mappages de routines de texte générique

Routine Tchar.h _UNICODE et _MBCS non définis _MBCS défini _UNICODE défini
_tpopen _popen _popen _wpopen

Spécifications

Routine En-tête requis
_popen <stdio.h>
_wpopen <stdio.h> ou <wchar.h>

Pour plus d’informations sur la compatibilité, consultez Compatibility.

Bibliothèques

Toutes les versions des bibliothèques Runtime C.

Exemple

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

Cette sortie suppose qu’il n’existe qu’un seul fichier dans le répertoire actif qui a une .c extension de nom de fichier.

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

Voir aussi

Processus et contrôle d’environnement
_pclose
_pipe