Mi principal problema es que tengo que implementarlo para linux y la entrada de datos es por main, o sea usando ./sim.exe "datos".
Se me compila perfectamente, pero al quere ejecutarlo me tira de error de segmentación.
Sospecho que el problema es la validación de la variable tiempo, o su extracción de la cadena, pero ya no se como modificar el código para que corra correctamente.
Se que pido mucho ya que es un coñazo mirar el código de otra persona e intentar entenderlo, pero lo he blindado con comentarios espero que eso ayuda.
Si se os ocurre cualquier cosa, os lo agradecería mil veces.
Código
/*********************************************** Nombre: Simulador Descripción: Primera parte de la creación de un simulador de sistema operativo RR. Fecha:13-01-09 Autor:Bruno Kröller da Silva ************************************************/ // Cabecera de librerías #include <stdio.h> // Uso de printf,... #include <stdlib.h> //Uso de atoi,... #include <unistd.h> //Uso de waitpid,... #include <sys/types.h> // Uso de rand,... #include <string.h> // Uso de //VARIABLES GLOBALES #define N_MAX 15 #define T_MAX 30 #define T_MIN 5 //FUNCIONES int hijos(int n_maximo,int quantum,int tiempo); // Función main que recive parametros de entrada int main (int argc, char *argv[]) { // Variables de entorno. int resultado; // 0 error 1 correcto int tiempo; int n_maximo; int quantum; //Valores predefinidos de las variables. n_maximo=5; quantum=80; resultado=0; /* Controlamos que el número de argumentos sea correcto, en caso contrario no empezamos a ejecutar las funciones principales. */ if(argc==1 || argc==3 || argc==5 || argc>6) { } else { /* Si entran dos argumentos, nombre + tiempo */ if(argc==2) { if(1<=tiempo<=120) { resultado=1; } } /* Si entran 4 argumentos, nombre+ numero+ p + tiempo o nombre+ quantum+ q + tiempo */ else if(argc==4) { if(*argv[2]=='p' && 1<=tiempo<=120) { resultado=1; } if(*argv[2]=='q' && 1<=tiempo<=120) { resultado=1; } } /* Si entran6argumentos, nombre+ numero+ p+ quantum+ q + tiempo */ else if(argc==6) { if(*argv[2]=='p' && *argv[4]=='q' && 1<=tiempo<=120) { resultado=1; } } // SAlIDA DEl PROGRAMA if(resultado==1) { } else { } } return 0; } int hijos(int n_maximo,int quantum,int tiempo) { int error; // 1 correcto, 0 error. pid_t pid_h; // Variable donde almacenaremos el pid del hijo int numero; int i; int tiempo_max; //INICIALIZACIÓN DE VALORES i=0; error=1; /* LANZAMIENTO DEL SISTEMA OPERATIVO */ //Creamos un hijo pid_t fork(); //Pedimos que nos diga su pid pid_h=getpid(); //Comprobamos que el hijo se ha creado if(pid_h==-1) { error=0; } else { //Ejecutado por el padre if(pid_h!=0) { waitpid(pid_h,NULL,0); } //Ejecutado por el hijo else { //Ejecutar el S.O. //Aquí termina el hijo } } /* LANZAMIENTO DE LA TEMPORIZACIÓN. */ //Creamos un hijo pid_t fork(); //Pedimos que nos diga su pid pid_h=getpid(); //Comprobamos que el hijo se ha creado if(pid_h==-1) { error=0; } else { //Ejecutado por el padre if(pid_h!=0) { waitpid(pid_h,NULL,0); } //Ejecutado por el hijo else { sleep(tiempo); //Aquí termina el hijo } } /* LANZAMIENTO DE LA TEMPORIZACIÓN. */ //CREARCIÓN DE LOS 10 HIJOS while(i<10) { //Generamos un numero no mayor que N_MAX //Le sumamos 1 para que empiece en 1. //Generamos el tiempo de espera de cada hijo. //Crea números en un intervalo de 5 a 30. //Tiempo de espera para crear el siguiente hijo. sleep(numero); //CREAR HIJO pid_t fork(); } pid_h=getpid(); if(pid_h==0) { sleep(tiempo_max); } //El padre espera a que todos los hijos mueran. wait(); return(error); } /* CHULETA DE VARIABLES Valores mínimos y máximos de: mínimo máximo Tiempo : 1 120 Quantum : 20 200 Programas : 1 5 numero esta entre [1,30] */