Prácticas de laboratorio (Primavera 2008) Programación de sistemas Práctica No. 1 Escribir un programa en C que lea desde la línea de comandos los nombres de dos archivos de texto. El programa deberá leer el contenido del primer archivo y deberá eliminar los símbolos ‘.’, ‘,’, ‘;’ y los dígitos del ‘0’ al ‘9’, el resultado será almacenado en el segundo archivo y al final del seundo archivo se deberá almacenar los símbolos que fueron eliminados del primero. Práctica No. 2 Escribir un programa en C que manipule una lista doblemente ligada. Los campos de cada nodo serán: nombre, edad, sexo. El programa desplegará un menú que permitirá realizar las siguientes operaciones: Mostrar la lista ligada ya se por nombre, edad o sexo, o por posición, o todos los elementos de la lista, eliminar un elemento específico (elimina todas las ocurrencias de ese elemento), eliminar un elemento de una posición en específico (ya sea por nombre, sexo o edad), inserta en una posición en específico, en este caso si la lista esta vacía se inserta como primer elemento, si el número de elementos es menor a la posición indicada, entonces el elemento se inserta al final. Práctica No. 3 Escribir un programa que permita crear n procesos, los procesos creados serán procesos hermanos, es decir, descenderan del mismo padre. Cada proceso hijo creará su propio archivo y almacenará en él el pid de su padre y el suyo. El número de procesos a crear se pasarán en la línea de comandos. Por ejemplo: ./prac3 3 --Aquí se crearán 3 procesos Práctica No. 4 Crear los siguientes programas: 1. Un programa que lea dos número enteros de la línea de comandos, los sume y el resultado sea colocado en la función exit al terminar el programa. 2. Un programa que se pause durante 10 segundos utilizando la función pause y alarm, cuando la señal sea atrapada el programa deberá terminar invocando a la función abort. 3. Un programa que realice un while (1). Una vez creados estos programas se deberá crear un cuarto programa el cual deberá ejecutar cada uno de los programas anteriores (procesos hijo) mediante la función exec, el proceso padre deberá esperar por la finalización de sus hijos y deberá desplegar en pantalla la información acerca de la terminación de cada hijo. El hijo 3 (programa 3) se deberá terminar enviándole una señal para su terminación. El proceso padre no podrá terminar en los primeros 10 segundos mediante la señal SIGINT, pasado este tiempo SIGINT se deberá reestablecer a su acción default. Práctica No. 5. Los mismo que la práctica 4, solo que con sigaction. Práctica No. 6. Crear un proceso escritor y un proceso lector que utilicen tuberías (escribir un lector y escritor con pipes, y un lector y escritor con fifos) para comunicarse. El proceso escritor leerá desde el teclado comando y los enviará al proceso lector, a su vez el proceso lector ejecutará los comandos mediante la función “exec”. Cuando el proceso lector reciba el comando “salir”, finalizará su ejecución y también la del proceso escritor. En el caso de fifos cuando el proceso escritor reciba del usuario el comando “adios”, finalizará su ejecución, pero solo la de él, el proceso lector continuará en ejecución en espera de que aparezca otro escritor. Práctica No. 7 Crear un programa “escritor” que lea datos del teclado, los datos serán los siguientes: nombre, edad, calificaciones (3), si el primedio es <6 asignar prioridad 3, si es >=6 y <8 asignar prioridad 2, y si es >=8 y <=10 asignar prioridad 1. Estos datos serán enviados a un programa “lector” a través de una cola de mensajes. El programa “escritor” terminará cuando el usuario oprima ctrl-C y confirme su deseo de terminar la sesión, esto es, cuando el usuario oprima ctrl-C, se debe desplegar un mensaje en pantalla que pregunte “¿Esta seguro de querer abandonar la sesion? S/N “. Para terminar por completo el programa “escritor” y el “lector”, el usuario debera escribir en el campo nombre la cadena “salir”. El programa “lector” permanecerá leyendo los paquetes cada 3 seg, primero los de prioridad 1, luego los de 2 y finalmente los de 3. El programa deberá ubicar cada paquete en un archivo dependiendo de su categoría, esto es , se creará un archivo para paquetes de prioridad 1, otro para paquetes de prioridad 2 y otro de prioridad 3. Los archivos deberán ser archivos binarios. Práctica No. 8 Semáforos y Memoria compartida