_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 EINVAL
sur . 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
_doserrno
et _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