Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Sistemas Operativos
Ricardo Taipe
14 de Junio 2015
Sistemas Operativos
INDICE
1. Introduccin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2. Objetivos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
3. Marco Terico. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
4. Desarrollo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
5. Grficas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
6. Conclusiones y Recomendaciones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
7. Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Sistemas Operativos
1. INTRODUCCIN.
Existen algunas llamadas al sistema en GNU Linux como son fork, exec, getpid,
getppid, wait/waitpid , exit.
En el trabajo que se presenta a continuacin, trata de una de las llamadas al
sistema exec la cual puede tener algunas variantes aadiendo letras como la e, l o
p.
A travs del informe a desarrollar, se tratar de analizar los dos archivos en
lenguaje de programacin ANSI C que permiten crear procesos en GNU Linux.
2. OBJETIVOS.
Analizar los archivos MiBash.c, MiBash2.c y entender las llamadas al sistema para
crear procesos con el uso de execv.
3. MARCO TERICO
Un proceso puede informalmente entenderse como un programa en ejecucin.
Formalmente un proceso es "Una unidad de actividad que se caracteriza por la
ejecucin de una secuencia de instrucciones, un estado actual, y un conjunto de
recursos del sistema asociados".[1]
Las funciones exec reemplazan el programa en ejecucin de un proceso con otro
programa. Cuando un programa llama a la funcin exec, el proceso deja de
ejecutar el programa actual y comienza a ejecutar el nuevo programa desde el
inicio. Hay varias funciones exec que varan ligeramente y que siguen ciertas
reglas.[2]
Sistemas Operativos
4. DESARROLLO.
4.1 CODIGO MIBASH.C
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<string.h>
void ejecutar(char *comando);
int main(){
int estado;
char comando[50];
char opcion1[50];
do{
printf(">>");
scanf("%s", comando);
fflush(stdin);
int pid = fork();
if(pid == 0){
execlp(comando, comando,NULL);
}
wait(&estado);
}while(strcmp(comando, "exit") != 0);
}
Sistemas Operativos
printf("Comando: %s\n",comando);
//Cambiamos el programa actual por uno nuevo
(el del comando ingresado)
execvp(comando, args);
// Recuerden esto se ejecuta solo si el EXEC
FALL
fprintf(stderr, "Error al ejecutar EXEC\n");
exit(100);
}else if(pid < 0){
//Se ejcuta en caso de error al momento de
crear un nuevo proceso
fprintf(stderr, "Error al crear el proceso
FORK\n");
exit(1);
}//Esperamos a que el proceso hijo termine (Otra
forma de esperar, antes usamos el wait)
int pid_ter = waitpid(-1, &estado, 0);
#ifdef DEPURAR
procesarSalida(pid_ter, estado);
#endif
}while(strcmp(comando, "exit") != 0);
exit(0);
}
void split(char *linea, char* args[]){
#ifdef DEPURAR
printf("Ejecutando comando: %s \n", linea);
#endif
int i=0;
char *lineaAux = linea;
char *aux, *avance;
avance = lineaAux;
while(*avance != 0){
while(*avance != 32 && *avance != 0){
avance++;
}
aux = avance + 1;
*avance = 0;
args[i] = lineaAux;
#ifdef DEPURAR
printf("Parmetro encontrado: %s \n",
args[i]);
#endif
lineaAux = aux;
avance = aux;
while(*avance == 32){
avance++;
}
lineaAux = avance;
i++;
}
args[i] = (char *) NULL;
}
void procesarSalida(int pid, int estado){
int retorno;
if(WIFEXITED(estado)){
Sistemas Operativos
MiBash2.c
5. GRFICAS.
Figura1 MiBash.c
Sistemas Operativos
Figura2 MiBash2.c
6. CONCLUSIONES Y RECOMENDACIONES.
Las directivas de archivos nos permiten tener diferentes versiones de un
programa.
La directiva #if, con las directivas #elif, #else y #endif, controla la compilacin
de partes de un archivo de cdigo fuente.
Al momento de compilar el archivo para hacer efectivas las directivas
condicionales es necesario agregar DDEPURAR para que podamos observar las
partes del cdigo que se ubican dentro de las mismas.
7. REFERENCIAS.
[1] Stallings 5 edicin pag. 109
[2] Diapositivas materia de Sistemas Operativos Ing. Danny Guamn.