• Viernes 8 de Noviembre de 2024, 17:44

Autor Tema:  Preguntita Sobre El System()  (Leído 1610 veces)

Grilli

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Preguntita Sobre El System()
« en: Jueves 2 de Noviembre de 2006, 09:42 »
0
Hola, muy wenas, tengo una preguntita sobre el system().

Estoy haciendo un mini-programita para la gestion de paquetes en Linux, y quisiera saber si hay alguna forma de guardar en un puntero lo que la consola devuelve enviandole un comando. Os pongo un ejemplo:

Tengo el siguiente arbol:
/home/grilli/
|---programacion
|---descargas
|---programas

Quisiera que me guardara en un puntero el contenido de la carpeta /home/grilli/.

Lo he intentado de la forma que podria haber sido mas sencilla:
Código: Text
  1. #include <stdio.h>
  2.  
  3. int main(){
  4.    char *lista;
  5.    lista = system("ls ~");
  6.    return 0;
  7. }
  8.  

Pero el problema es que la funcion system() es de tipo int.

Alguien sabe si hay alguna forma de hacerlo?

Saludos ;)

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Preguntita Sobre El System()
« Respuesta #1 en: Jueves 2 de Noviembre de 2006, 10:04 »
0
Podes redirigir la salida a un archivo o incluso mejor a un pipe.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Grilli

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Preguntita Sobre El System()
« Respuesta #2 en: Jueves 2 de Noviembre de 2006, 10:17 »
0
Anda, pues ahora que lo dices, tienes razon. Joder, vaya cagada :P Muchas gracias tio :)

Y... ahora que lo mencionas... que es un pipe?

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Preguntita Sobre El System()
« Respuesta #3 en: Jueves 2 de Noviembre de 2006, 10:23 »
0
Cita de: "Grilli"
Anda, pues ahora que lo dices, tienes razon. Joder, vaya cagada :P Muchas gracias tio :)

Y... ahora que lo mencionas... que es un pipe?
Pipe significa tuberia en Ingles y es una zona de memoria compartida que se usa para comunicacion entre procesos. En este caso si creas un pipe y en vez de escribir en consola se escribe en el pipe podrias hacer algo como:

Código: Text
  1.  
  2.   //crear pipe
  3.   //ejecutar y redirigir salida al pipe creado
  4.   char *data;
  5.   //leer del pipe
  6.   *data = 0;
  7.  
  8.  

Asi te ahorras el trabajo, innecesario en este caso, con archivos.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Grilli

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Preguntita Sobre El System()
« Respuesta #4 en: Jueves 2 de Noviembre de 2006, 11:04 »
0
Mmmmm... no he pillado lo que es un pipe, pero bueno, da igual, ya tendre tiempo de aprenderlo. Ahora lo que me surgen son otros problemas.

Como puedo enviar al system el contenido de un puntero? Me explico:

Código: Text
  1. #include <stdio.h>
  2. #include <strings.h>
  3.  
  4. int main(){
  5.    char *directorio;
  6.    printf("Escribe la ruta que quieres visualizar: ");
  7.    scanf("%s", directorio);
  8.    directorio = "ls " + directorio //Esta es la primera linea que no me sale bien
  9.    system("directorio"); //Esta linea es la otra que no se como hacer
  10. }
  11.  
  12.  

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Preguntita Sobre El System()
« Respuesta #5 en: Jueves 2 de Noviembre de 2006, 11:25 »
0
Código: Text
  1.  
  2.    char *directorio;
  3.   printf("Escribe la ruta que quieres visualizar: ");
  4.   scanf("%s", directorio);
  5.  
  6.  

Aca ya tenemos el primer problema ... o usas memoria dinamica con malloc/new para directorio (ahora su valor es indefinido y daria una excepcion) o usas una variable local en la pila (char directorio[256] por ejemplo).

Código: Text
  1.  
  2. directorio = "ls " + directorio //Esta es la primera linea que no me sale bien\
  3.  
  4.  

Esto es un conjunto de bytes consecutivos y no podes usar el + asi como asi; tenes que usar las funciones str*. Igual tendrias que usar otra variable, donde podes empezar con strcpy para copiarle el "ls " y despues seguir con strcat para agregarle el contenido de directorio. Por ejemplo si tuvieramos es variable llamada dir despues hariamos:

Código: Text
  1.  
  2.  system(dir);
  3.  
  4.  

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Grilli

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Preguntita Sobre El System()
« Respuesta #6 en: Jueves 2 de Noviembre de 2006, 14:39 »
0
Ya esta, ya he arreglado los problemillas que tenia. Muchas gracias por tu ayuda ;)