Provided by:
manpages-es_1.55-8_all 
NOMBRE
system - ejecuta una orden del intérprete de órdenes (shell)
SINOPSIS
#include <stdlib.h>
int system(const char *string);
DESCRIPCIÓN
system() ejecuta una orden especificada en string llamando a /bin/sh -c
string, y regresa después de que la orden se haya terminado de
ejecutar. Durante la ejecucion de la orden, se bloqueará SIGCHLD y no
se hace caso de las señales SIGINT ni SIGQUIT.
VALOR DEVUELTO
El valor devuelto es -1 en caso de error (p.e. falló la llamada a
fork), y el estado devuelto por la orden en caso contrario. Este
último valor está en el formato especificado en wait(2). Así, el
código de salida de la orden será WEXITSTATUS(status). En caso de que
/bin/sh no pudiera ejecutarse, el estado de salida será el de una orden
que haga exit(127). Si el valor de string es NULL, system() devuelve
un número distinto de cero si hay un intérprete de órdenes 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 mencionó, system() ignora SIGINT y SIGQUIT. Esto puede hacer
que los programas que invocan a esta función 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 extraños 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 funcionará apropiadamente desde
programas con privilegios suid o sgid en sistemas donde /bin/sh sea la
versión 2 de bash, puesto que bash 2 elimina los privilegios en el
arranque. (Debian usa una versión modificada de bash que no hace ésto
cuando es invocado como sh.)
En realidad no se comprueba si el intérprete de órdenes /bin/sh está
disponible o no; en Linux siempre se supone que lo está. ISO C
especifica la comprobación, pero POSIX.2 especifica que el valor
devuelto siempre será no cero, ya que un sistema sin intérprete de
órdenes no es conforme, y esto es lo que se implementa.
Es posible que una orden del intérprete de órdenes devuelva 127, así
que ese código no es una indicación segura de que execve() haya
fallado.
VÉASE TAMBIÉN
sh(1), signal(2), wait(2), exec(3)
23 septiembre 2001 SYSTEM(3)