Provided by:
manpages-es_1.55-10_all 
NOMBRE
system - ejecuta una orden del interprete de ordenes (shell)
SINOPSIS
#include <stdlib.h>
int system(const char *string);
DESCRIPCI'ON
system() ejecuta una orden especificada en string llamando a /bin/sh -c
string, y regresa despues de que la orden se haya terminado de
ejecutar. Durante la ejecucion de la orden, se bloqueara SIGCHLD y no
se hace caso de las senales SIGINT ni SIGQUIT.
VALOR DEVUELTO
El valor devuelto es -1 en caso de error (p.e. fallo la llamada a
fork), y el estado devuelto por la orden en caso contrario. Este
ultimo valor esta en el formato especificado en wait(2). Asi, el
codigo de salida de la orden sera WEXITSTATUS(status). En caso de que
/bin/sh no pudiera ejecutarse, el estado de salida sera el de una orden
que haga exit(127). Si el valor de string es NULL, system() devuelve
un numero distinto de cero si hay un interprete de ordenes disponible,
y cero si no.
system() no afecta al estado de espera de cualquier otro proceso hijo.
CONFORME A
C ANSI, POSIX.2, BSD 4.3
OBSERVACIONES
Como se menciono, system() ignora SIGINT y SIGQUIT. Esto puede hacer
que los programas que invocan a esta funcion desde un bucle sean
ininterrumpibles, a menos que se preocupen ellos mismos de comprobar el
estado de salida del hijo. P.e.
while(algo) {
int ret = system("foo");
if (WIFSIGNALED(ret) &&
(WTERMSIG(ret) == SIGINT || WTERMSIG(ret) == SIGQUIT))
break;
}
No llame a system() desde un programa con privilegios suid o sgid,
porque pudiera ser que se emplearan valores extranos para algunas
variables de entorno para comprometer la integridad del sistema. En su
lugar emplee la familia de funciones exec(3), salvo execlp(3) o
execvp(3). system() , de hecho, no funcionara apropiadamente desde
programas con privilegios suid o sgid en sistemas donde /bin/sh sea la
version 2 de bash, puesto que bash 2 elimina los privilegios en el
arranque. (Debian usa una version modificada de bash que no hace esto
cuando es invocado como sh.)
En realidad no se comprueba si el interprete de ordenes /bin/sh esta
disponible o no; en Linux siempre se supone que lo esta. ISO C
especifica la comprobacion, pero POSIX.2 especifica que el valor
devuelto siempre sera no cero, ya que un sistema sin interprete de
ordenes no es conforme, y esto es lo que se implementa.
Es posible que una orden del interprete de ordenes devuelva 127, asi
que ese codigo no es una indicacion segura de que execve() haya
fallado.
V'EASE TAMBI'EN
sh(1), signal(2), wait(2), exec(3)
23 septiembre 2001 SYSTEM(3)