Ejecutar comando de shell desde C

30 01 2008

Hay ocaciones en que ejecutar un comando nativo del sistema, o mejor dicho un comando reconocido por nuestra shell, nos facilita mucho la vida….

Bueno, no para todos es tan obvio como hacer esto, asi que aca voy a dejar registrado como realizar esta sencilla operacion 😉

El formato es simple 😀
system("comando que quieras");

Aqui dejo un sencillisimo ejemplo, primero creamos un archivo llamado myls.c y dentro de él ponemos el siguiente codigo:

#include<stdio.h>
int main(){
system("ls -l");
return 0;
}

Al copiar y pegar el codigo va a tener un problemas con las comillas, asi que las tienen que poner denuevo 😀

Para compilar hacemos lo siguiente:
gcc myls.c -o myls

y finalmente para ejecutarlo, hacemos lo siguiente :

./myls

Al ejecutar este programa , será lo mismo que ejecutar en la consola el comando «ls -l» ( sin comillas).

Saludos


Acciones

Information

22 responses

11 09 2008
Juan Roberto Gonzalez

Se puede ejecutar un comamdno shell desde C y esperar por una respuesta antes de seguir procesando???
Gracias!

2 03 2009
danito

sencillo y util saber como van las llamadas al systema

16 03 2009
joel-jonas

bueno gracias por tu post es muy bueno pero tengo una duda si quisiera abrir un carpeta como le hago..?

16 03 2009
jgutierrez

Hola Joel-jonas!
Bueno en el caso que quieras abrir una carpeta para navegarla puedes poner la instruccion «nautilus ~», por ejemplo, esto abriria tu home en una ventana de nautilus.
No se si esa era tu pregunta.
Saludos

15 06 2009
Mario

Si quiero capturar los resultados?
Gracias.

20 10 2017
Anonimo

Usa esto:

#include
int main(){
system(«echo $(ls) > archivo-para-registrar-datos.txt»)
system(«nautilus /root»); // Pon la carpeta que quieras
return 0;
}

Lo compilas (gcc programa.c -o programa)
Le das permisos (chmod 777 programa)
Lo ejecutas (./programa)

3 12 2009
luis

men demasiadas gracias, usted no sabe la salvada que me acaba de pegar

12 12 2010
ivan

Como hago para capturar la salida del system(«ls -l») por ejemplo, y mostrarlo en un textEdit???

23 04 2011
Maipu

system(«ls -l > Archivo»)

si el archivo no existe lo crea y si existe lo sobreescribe.

si en vez de poner «>» pones «>>» agrega el contenido al final del archivo.

Tambien seria sano agregar la librería stdlib.h al principio del codigo para que al compilar con la opcion «-Wall» no arroje warning.

#include

Saludoss

11 11 2011
bars

hola amig me podrias ayudar, lo que necesito hacer es abrir un directorio pero desde el mismo programa (sin abrir el directorio) mas bien es acceder al directorio, por eso nautilus no me sirve xq eso abre el directorio pero yo ocupo algo para acceder una ilustracion seria algo asi
system(«cd directorio»); algo asi me entiendes??

4 03 2012
Julio

muchas gracias funciono perfecto

13 11 2012
Alfredo

Como consigo pasar el resultado de la orden a una variable.
Ejemplo:
Pasar a la variable x el resultado de hacer un ls

12 06 2013
ramiro giandinoto

Quisiera saber cómo puedo abrir la terminal y dentro de ella ejecutar el comando ls todo desde C. Muchas gracias y geniales tus explcaciones.

24 03 2014
Ricardo

Para ejecutar un comando en shell desde un programa en C y recuperar su salida pueden utilizar la función popen(): http://www.lix.polytechnique.fr/~liberti/public/computing/prog/c/C/FUNCTIONS/popen.html

31 03 2014
dalmemail

Una pregunta ese system esta incluido en stdio.h la cosa es que tengo una version de stdio.h que no lo detecta como lo programo (la funcion system) GRACIAS

13 05 2014
Anónimo

Muy claro y directo.

27 06 2016
salo

a mi em sale este mensaje amigo «Permission denied», alguna idea de como solventarlo?

2 09 2017
Anónimo

Porque debes ejecutar como administrador, seguro invocas un comando que requiere permisos administrativos

20 10 2017
Anonimo

Dale permisos asi:
chmod 777 programa
y luego lo ejecutas
./programa

19 11 2018
Anónimo

hola
como le hago para poner una imagen de icono a mi programa en c

8 12 2020
Anónimo

hola, hay alguna otra manera de ejecutar un comando shell sin system o exec?

26 12 2023
Anónimo

Buen post!!!

Deja un comentario