ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Desarrollo de una micro Shell


Enviado por   •  22 de Octubre de 2021  •  Prácticas o problemas  •  822 Palabras (4 Páginas)  •  219 Visitas

Página 1 de 4

[pic 1][pic 2][pic 3]

~Universidad de Guanajuato~

Sistemas

Operativos Profesor:

Dr. Correa Tomé Tarea 02:

Desarrollo de una Micro

Shell Alumno:

Abraham Ponce Alba

NUA: 147173

13 de febrero del 2021

En esta práctica se realizará una Micro Shell. Este programa deberá ser desarrollado para un sistema tipo Unix (e.g. Linux, BSD, MacOS) ya que requerimos que el OS sea POSIX para poder usar las llamadas al sistema correctas (fork, exec, wait, chdir).

Un terminal es una forma de acceder al sistema sin utilizar la interfaz gráfica, es decir, realizar todo tipo de tareas ayudándose o aprovechando comandos que ya están predefinidos. En otras palabras, la terminal o consola no es ni más ni menos, que una aplicación que te permite, mediante órdenes escritas realizar todo tipo de operaciones.

La shell desarrollada deberá contar con las siguientes características:

  1. Debe mostrar un prompt donde el usuario pueda ingresar comandos.
  2. El programa debe ejecutar los comandos que introduzca el usuario.
  1. Los comandos son en realidad programas instalados en el OS, como por ejemplo en los directorios /bin y /usr/bin.
  2. Para ejecutar un comando, primero hay que crear un proceso hijo con la función fork(), que se encuentra en la biblioteca unistd.h.
  3. Luego, hay que reemplazar la imagen de núcleo del proceso hijo por la del proceso que se desea ejecutar. Esto se hace con alguna de las funciones exec() de la biblioteca unistd.h (e.j. execp(), execvp()).
  1. El proceso padre debe bloquearse mientras el proceso hijo se ejecuta, de lo contrario pueden ocurrir errores de ejecución. Para bloquear al proceso padre mientras se ejecuta el proceso hijo se utiliza la función waitpid() de la biblioteca sys/wait.h.
  2. Si el programa no puede ejecutarse, informarlo a usuario con un mensaje de error.
  3. Después de ejecutar un comando, la ushell debe mostrar el prompt nuevamente.
  4. Hay que implementar el comando 'cd' mediante una llamada al sistema, ya que este comando no es un programa. Para ello, usar la función chdir() de la biblioteca unistd.h. Este comando cambia la ruta de trabajo actual, lo que permite navegar por el árbol de directorios.
  5. Adicionalmente, implementar un comando 'exit' o 'quit' que permita finalizar la ejecución de la usell sin necesidad de recurrir a la señal CTRL+C.

Solución implementada:

Para el desarrollo de la terminal en unix utilizaremos lenguaje de programación c además de las librerías propias del leguaje y “string.h” para la manipulación de las cadenas de texto, también utilizaremos “unistd.h” la cual contiene las funciones necesarias para los procesos (fork(), exec(), execp(), execvp()).

En primer lugar, requerimos crear una función que indique al usuario que puede comenzar a escribir una línea de comandos.

[pic 4]

Esta línea será leída y guardada en la variable “buffer” mediante la función fgets(), para posteriormente limpiar los saltos de línea remplazándolos con un “0” mediante la función trim().

[pic 5]

Si en la línea leída existiese las palabras “exit” o “quit” el usuario nos estaría indicado que desea finalizar el uso de la Shell, por tanto, estas dos palabras finalizaran la lectura de comandos en la terminal.

[pic 6]

De lo contrario mandaremos llamar nuestra función get_args(), la cual separa la cadena de caracteres en tokens para que SO pueda interpretar las indicaciones palabra por palabra que se le dan.

...

Descargar como (para miembros actualizados)  txt (5.6 Kb)   pdf (414.7 Kb)   docx (202.6 Kb)  
Leer 3 páginas más »
Disponible sólo en Clubensayos.com