popen(3) Library Functions Manual popen(3) NOMBRE popen, pclose - flujo desde o hacia un proceso BIBLIOTECA Biblioteca Estandar C (libc, -lc) SINOPSIS #include FILE *popen(const char *orden, const char *tipo); int pclose(FILE *flujo); Requisitos de Macros de Prueba de Caracteristicas para glibc (vease feature_test_macros(7)): popen(), pclose(): _POSIX_C_SOURCE >= 2 || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE DESCRIPCION La funcion popen() inicia un proceso creando una tuberia, llamando a fork(2) para crear el proceso y ejecutando el interprete de ordenes (shell). Puesto que una tuberia es unidireccional por definicion, el argumento tipo solo puede especificar lectura o escritura, pero no ambos; el flujo resultante es respctivamente de lectura o escritura exclusiva. El argumento orden es un puntero a una cadena terminada en cero que contiene una linea de orden del shell. Esta orden se pasa a /bin/sh precedida de la opcion -c; si se necesita interpretar la linea, esto lo hace el shell. El argumento tipo es un puntero a una cadena terminada en cero que debe contener la letra 'r' para lectura o la letra 'w' para escritura. Desde glibc 2.9, este argumento puede incluir adicionalmente la letra 'e', lo que activa el indicador de cierre al ejecutar (FD_CLOEXEC) en el descriptor de archivo subyacente; consulte la descripcion del indicador O_CLOEXEC en open(2) para conocer las razones por las que esto puede ser util. El valor de retorno de popen() es un flujo de E/S estandar normal en todos los aspectos, salvo que debe cerrarse con pclose() en lugar de fclose(3). Escribir en este flujo escribe en la entrada estandar de la orden; la salida estandar de la orden es la misma que la del proceso que llamo a popen(), a menos que la propia orden la modifique. Por el contrario, leer desde el flujo lee la salida estandar de la orden, y la entrada estandar de la orden es la misma que la del proceso que llamo a popen(). Tenga en cuenta que los flujos de salida popen() se almacenan en bufer de bloque por defecto. La funcion pclose() espera que el proceso asociado termine, y devuelve el estado de salida de la orden como el devuelto por wait4(2). VALOR DEVUELTO popen(): en caso de exito, devuelve un puntero a un flujo abierto que puede usarse para leer o escribir en la tuberia; si las llamadas a fork(2) o pipe(2) fallan, o si la funcion no puede asignar memoria, se devuelve NULL. pclose(): en caso de exito, devuelve el estado de salida de la orden. Si wait4(2) devuelve un error o se detecta algun otro error, se devuelve -1. Si ocurriese un fallo, ambas funciones establecen errno para indicar el error. ERRORES La funcion popen() no establece errno si falla la asignacion de memoria. Si la funcion subyacente fork(2) o pipe(2) falla, se establece errno para indicar el error. Si el argumento tipo no es valido y se detecta esta condicion, errno se establece en EINVAL. Si pclose() no puede obtener el estado del hijo, se asigna a errno el valor ECHILD. ATRIBUTOS Para obtener una explicacion de los terminos usados en esta seccion, vease attributes(7). +-----------------------------+--------------------+-------------------+ |Interfaz | Atributo | Valor | +-----------------------------+--------------------+-------------------+ |popen(), pclose() | Seguridad del hilo | Multi-hilo seguro | +-----------------------------+--------------------+-------------------+ VERSIONES El valor 'e' para tipo es una extension de Linux. ESTANDARES POSIX.1-2008. HISTORIAL POSIX.1-2001. ADVERTENCIAS Lea atentamente las advertencias en system(3). ERRORES Puesto que la entrada estandar de una orden abierta para lectura comparte su puntero de posicion con el proceso que llamo a popen(), si el proceso original ha hecho una lectura tamponada, la posicion en la entrada de la orden puede no ser la esperada. De forma similar, la salida de una orden abierta para escritura puede resultar mezclada con la del proceso original. Esto ultimo puede evitarse llamando a fflush(3) antes de a popen(). Un fallo en la ejecucion de la shell es indistinguible de un fallo en la ejecucion de la orden por parte de esa shell, o de una salida inmediata de la orden. La unica pista es un estado de salida de 127. VEASE TAMBIEN sh(1), fork(2), pipe(2), wait4(2), fclose(3), fflush(3), fopen(3), stdio(3), system(3) TRADUCCION La traduccion al espanol de esta pagina del manual fue creada por Gerardo Aburruzaga Garcia , Juan Piernas y Marcos Fouces Esta traduccion es documentacion libre; lea la GNU General Public License Version 3 o posterior con respecto a las condiciones de copyright. No existe NINGUNA RESPONSABILIDAD. Si encuentra algun error en la traduccion de esta pagina del manual, envie un correo electronico a . Paginas de Manual de Linux 6.15 17 Mayo 2025 popen(3)