Laboratorio N5
Basandonos en lo realizado en el Laboratorio 4, se busca:
- Utilizar mecanismos de concurrencia e IPC.
- Ampliar las características de un intérprete de línea de comandos al estilo Bourne shell.
- Comprender el uso de la API de señales del SO
Con el material dado en clase, este laboratorio está diseñado para resolverse entre 8 y 10 horas.
Este trabajo práctico consta en la elaboración de un programa en lenguaje C sobre GNU/Linux. El trabajo se divide en soluciones incrementales.
Si se ingresa alguna de las combinaciones CTRL-C, CTRL-Z o CTRL-/, las señales resultantes (SIGINT, SIGTSTP, SIGQUIT respectivamente) deben ser enviadas al trabajo (job) en ejecución de primer plano en vez de a myshell. Si no hay un trabajo (job) en ejecución de primer plano, no debe suceder nada.
myshell provee la funcionalidad de un pipe a través del operador | (pipe). El mismo conecta la salida estándar del proceso (stdout) lazando por el comando de la izquierda del pipe con la entrada estándar del proceso (stdin) que se genera con el comando a la derecha del pipe.
Ejemplos:
$ last <username> | wc -l
$ ps aux | grep firefox
$ grep bash /etc/passwd | cut -d “:” -f 1 | sort -r
¿Dónde se encuentran los pipes en el filesystem, qué atributos tienen?
Se debe soportar redirección de entrada/salida en stdin y/o stdout.
Por ejemplo:
program arg1 ar2 < inputfile > outputfile
Ejecuta la el programa program con los arguments arg1, arg2. stdin es reemplazado por inputfile y stdout por outputfile. La redirección debe funcionar para el comando interno echo.
Dado que este laboratorio propone agregar funcionalidades a un proyecto existente, deben utilizar correctamente el workflow de desarrllo. Es decir:
- Se debe realizar un fork al proyecto original (laboratorio 4)
- Se implementan las nuevas funcionalidades
- Se realiza un Pull Request en un nuevo branch en el repositorio del laboratorio 4.
- Se debe compilar el código con los flags de compilación: -Wall -Pedantic -Werror
- Dividir el código en módulos de manera juiciosa.
- Estilo de código.
- El código no debe contener errores, ni warnings.
- El código no debe contener errores de cppcheck.
- myshell no debe crear procesos zombies.
- Informe del desarrollo del proyecto (markdown).
- Código (funcionando bajo las especificaciones dadas y bajo cualquier caso de test de parámetros de entrada).
- Makefile
- Todo en el GitHub