PreguntasLinux

Versión Completa: como junto un script del shell con c?
Actualmente estas viendo una versión simplificada de nuestro contenido. Para ver la versión completa en el formato correcto, dale click aquí
buenas:
mi pregunta es simple como incorporo a un programa hecho en c un script del shell??
o solo me queda usr ncurses??
gracias!!!
Hola, si lo que quieres es ejecutar comandos del shell, sólo tienes que usar la sentencia system()...

ejemplo, para ejecutar top:

Código:
#include <stdlib.h>

int main()
{
    system(\"top\");
    return 0;
}


aca te dejo la referencia:

Código:
int  system ( const char * command );

Execute command.
  Invokes command interpreter to execute a command. Once terminated, the interpreter gives back control to the program returning an int value.

Parameters.

command
    Null-terminated string containing the system command to be executed.

Return Value.
  If a command was successfully executed the command interpreter returns an adequate value; generally 0 indicates that the action performed by the command interpreter terminated with no errors.
  A return value of -1 indicates an error, and global variable errno is set to one of the following errors:

    value    description
    ENOENT    Command interpreter not found
    ENOEXEC    Command interpreter is not executable
    ENOMEM    Error allocating memory for the process
    E2BIG    Argument list too big

Portability.
  Defined in ANSI-C.
  Return value and possible errno values are system dependent.

Example.

/* system example : DIR */
#include <stdio.h>
#include <stdlib.h>

int main ()
{
  int i;
  puts (\"Trying to execute command DIR\");
  i = system (\"dir\");
  if (i==-1) puts (\"Error executing DIR\");
  else puts (\"Command successfully executed\");
  return 0;
}


saludos...

hola ! voy a tratar de explicarme mejor

lo que me interesa es poder usar en mis programas una interfas mas amena para el usuario y no solo limitarme al printf() /scanf().... es por eso que queria uncorporar por ejemplo las posibilidades del programa dialog... que hacen una intertfas bien bonita...
entonces reformulo la pregunta...
como uso dialog por ejemplo en mi porgrama...
esa forma que me decis es muy interesante... pero si yo llamo a dialog y hago un inputbox el dato capturado como lo vuelca al programa que estoy haciendo...
bueno experimento y te escribo gracias....
pd: todo esto venia a ver si era posible evitar usar ncurses o pearl \"puesto que no lo manejo ni de cerca....!!\"
que programa es dialog???, si necesitas guardar un parámetro dado por ese programa, sólo tenes que poner i = system (\"dialog [algo]\"); y ya esta en la variable i...

saludos...
Como dijo Warp, tendrias que usar la funcion system de C...
aca te dejo una pagina que tiene todas las opciones de dialog

http://nixdoc.net/man-pages/Linux/man1/dialog.1.html


Espero que te sirva...

Saludos!!!... 1-wink
gracias...

no se si esta sea la mejor forma de hacer una interface
pero hasta que aprenda ncurses....
bueno hola otra vez!!
estuve probando el tema de utilizar system()....
pero hay un problema .. sole devuelve valores enteros(1,0 o -1)creo..
de acuerdo al resultado de la funcion..
por esto no sirve para capturar una cadena de caracteres.....
entonces fui a buscar el codigo de dialog(programa de salvio lam) y estoy ahora trabajando con eso...\" Warp....dialog es el programa con el que esta hecha el scrip de iunstalkacion de slackware por ejemplo\"
tengo una pregunta...??
etoy haciendo un programa para diseño de circuitos electronicos (algo simple pero que no puede encontrar por ahi...) y como dije antes estoy modificando algunos fuentes.....
no hay problema con esto verdad? osea con modificar y utilizar las fuentes de otro...
tambien quisiera saber un poco mas sobre el tema de la publicacion del software.....(licencias, etc... ) y bueno creo que por el momentop es todo......
gracias atodos ustedes que estan ahi y hacen posible la existencia de gnu/linux!!!!!!!!!!!!!1
gracias!!!!!!!!
saludos.!!
bueno si quieres mmodificar los codigos de otros progs. te tenes que fijar que licencia tienen, si son gpl no hay drama...
aca tenes más sobre la licencia gpl: http://www.preguntaslinux.org/showthread.php?tid=510
después esta la licencia open source...
y la que es pago....

saludos...
Hola 1-wink
Lo que queres hacer se llama en relidad tuberias osea pipe.
C/C++ interactua con shell a traves de una funcion que lee o escirbe.
Para leer mas visita http://blog.txipinet.com/index.php/2006/...-linux-vii
Si no entiendes algo avisa.
exitos1-wink
El siguiente código es una muestra clara de cómo se puede hacer una llamada utilizando tuberías y procesos hijo, de forma sencillísima:
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <limits.h>

#define SIZE PIPE_BUF

int main(int argc, char *argv[])
{
FILE *file;
char *command= "ls .";
char buffer[SIZE];

file=popen( command, "r" );

while( !feof( file ) )
{
fscanf( file, "%s", &buffer );
printf( "%s\n", buffer );
}

pclose( file );

return 0;
}
Nuestro programa simplemente crea un proceso hijo que será reemplazado por una llamada al comando “ls .”, y se nos devolverá un puntero a un fichero que será el resultado de ese comando. Leemos ese fichero y lo escribimos por pantalla. Al finalizar, cerramos la tubería con pclose().

Lee tambien el post anterior y especifico web.
exitos1-wink
Hola
bueno aki kon un aporte, gastonseche si necesitas usar el system y cadenas es necesario utilizar el sprintf, el cual te concatenaria una cadena a una variable y solo es necesario mandarlo en la funcion system, en el siguiente ejemplo te muestro como mandar parametros cadenas a un shell:

#include <stdio.h>
#include <stdlib.h>
int main()
{
char c[50]= “hola”;
char script[100];

sprintf(script,"/home/script.sh %s", c);
system(script);

return 0;
}

Tomando en kuenta ke en el shell script.sh cacha un valor, por ejemplo "a=$1"
Espero sirva de ayuda, saludos 1-grin
URLs de Referencia