Practica 1. Programacion de sistemas Objetivo. Practicar los temas II, III y IV 1. Investigar que hace la funcion getopt de C y generar un programa que tome de entrada estandar los datos, generar el resulatado a salida estandar y si: + Se da opción -l debe convertir todo a minusculas + Se da opcion -u debe convertir todo a mayusculas + Se opcion -n se debe enviar la salida a /dev/null + Se da opcion -f debe enviar al archivo que se le indique + Se da opcion -h debe dar ayuda del comando La ayuda debe decir maymin [opciones] -l convertir todo a minusculas -u convertir todo a mayusculas -n enviar la salida a /dev/null -f enviar la salida al archivo que se le indique -h ayuda Nota: Si no se dan ninguna opcion, se envia todo a salida estandar y en mayusculas. La opcion -n y -f son mutuamente excluyentes; opcion -l y -u son excluyentes Ejemplo cat /etc/passwd|maymin -u -f /tmp/archivo #convierte a mayusculas y enviar a /tmp/archivo man man | maymin -l -n #enviar a minusculas y enviarlo a /dev/null 2. En lenguaje C existe una función denominada system que ejecuta un programa. Crea una propia función misystem, usando fork y exec. Apoyarse de la pagina manual de system para decidir el diseño de la función. Proveer un ejemplo en C que use esta funcion y que mande a ejecutar un ls -l 3. Investigar que es un proceso demonio (daemon) e implantar uno en lenguaje C. Para que sirve el programa que se encuentra en http://libslack.org/daemon/. Compilar el programa y hacer un ejemplo de un proceso demonio con el. 4. Construir un programa en C que divida un archivo en varios archivos de un tamaño específico. Desde la linea de comando debe recibir como primer argumento el tamaño de cada archivo y como segundo argumento el nombre del archivo a dividir. Su filosofia es similar al comando split 5. Codificar en lenguaje C un shell. Dicho shell debe tener las siguientes caracteristicas +) debe recibir de entrada estandar los comandos que ejecuta +) Debe poder arrancar procesos en primer plano (foreground) o segundo plano (background) +) en este ultimo caso, se debe usar el simbolo & para indicar que el proceso debe quedar en segundo plano +) se debe poder redireccionar entrada y salida estandar con los simbolos < y > respectivamente +) Cuando el usario presione Ctl-D, el shell debe concluir su ejecución Nota, se deben usar llamadas al sistema como fork, wait, exec, dup2, exit 6. Hacer el ejercicio 4 usando Perl. 7. La multiplicación o producto cruz de matrices consiste en tomar un matriz A de NxM y multiplicar por una matriz B de MxP, resultando una de tamaño C NxP. Generar un programa en C que: + Multipliqe matrices de hasta 150x150. + Las matrices de entrada A y B se deben tomar de archivos distintos, cada uno de ellos en formato CSV. + Un conjunto de threads o hilos en paralelo apliquen por un conjunto de renglones y columnas de las matrices A y B. + Cuando todos los hilos concluyan, solo debe quedar el hilo original y debe escribir a un archivo CSV (comma separated value o archivo separado por comas) el resultado de la multiplicacion. + Ofrecer via opciones de la linea de comando que se configure el numero de hilos a correr, cuantos renglones/columnas se reparten y de que archivos de entrada CSV toma las matrices A y B, dando las siguientes opciones multiplicar -a ArchivoInA.csv -b ArchivoInB.csv -c ArchivoOutC.csv -t numerothreads -n numero_subrenglones Por ejemplo, si el archivo de la matriz A esta en /tmp/matrizA.csv, la matriz B esta en /tmp/matrizB.csv, la matriz C debe quedar en /tmp/matrizC.csv, se desea que 10 hilos lo procesen, donde cada uno debe tomar de 5 renglones multiplicar -a /tmp/matrizA.csv -b /tmp/matrizB.csv -c /tmp/matrizC.csv -t 10 -n 5 Usar POSIX Thread, llamadas al kernel para manejo de archivos y rutinas de