Anda di halaman 1dari 5

Examen Parcial de ARISO2

La revisin de notas del examen ser el 14/12/2005d e 17:00 a 18:00

Contestad cada pregunta usando slo el espacio que tenis a continuacin de cada una

Pregunta 1.-

(3 puntos)
1:#include <unistd.h> 2:#include <fcntl.h> 3: 4:main () { 5:int ret, fd1, fd2; 6:char c; 7: 8:fd1 = open(f1, O_RDWR); 9:fd2 = dup(fd1); 10: A 11:ret = read(fd1, &c, 1); 12:while (ret > 0){ 13: write(fd2, &c, 1); 14: ret = read(fd1, &c, 1); 15:} 16:}

Dado el siguiente cdigo:

Contestad a las siguientes preguntas justificando vuestras respuestas . 1 Representad el estado de la tabla de canales del proceso y de la tabla de cheros abiertos suponiendo que se encuentra en el punto A marcado en el cdigo

2 Cul ser el contenido de f1 al nal de la ejecucin de este programa, si inicialmente contiene lo siguiente: abcdef

22/11/2005

1/5

3 Si quisiramos substituir la sentencia de la lnea 9 por la siguiente sentencia:


9:fd2 = open (f1, O_WRONLY);

Qu otras modificaciones tendramos que introducir en el cdigo para que el resultado de la ejecucin continuara siendo el mismo?

4 Si eliminramos la sentencia de la lnea 9, y las escrituras se hicieran sobre el canal que contiene afectara de alguna manera a la ejecucin?

fd1,

22/11/2005

2/5

Pregunta 2.-

(4 puntos)

Dado el siguiente cdigo (programa_padre):


1:#include <unistd.h> 2:#include <fcntl.h> 3: 4:main (int argc, char *argv[]) { 5:int fd_d, ret, valor; 6:int fd_p[2]; 7:char c; 8: 9:fd_d = open(argv[1], O_WRONLY|O_APPEND|O_CREAT, 0600); 10:pipe(fd_p); 11:if (fork()== 0){ 12: close(fd_p[1]); 13: ret = read(fd_p[0], &c, 1); 14: while (ret > 0){ 15: write(fd_d, &c, 1); ret = read(fd_p[0], &c, 1); 16: } 17: 18:} else { close (fd_p[0]); 19: ret = read(0, &c, 1); 20: while (ret >0){ 21: write(fd_p[1], &c, 1); 22: ret=read(0, &c, 1); 23: } 24: wait(&valor); 25: write(fd_d,Fin datos\n,10); 26: 27:} 28:}

Suponiendo que se ejecuta de la siguiente manera:


pinguino%programa_padre f1 < f2

Y que el contenido inicial de f1 es abcdef y el de f2 123456 1 Cul ser el resultado de la ejecucin? Y el contenido nal de f1 y f2?

2 Si se eliminara la llamada a sistema wait (lnea 26), cambiara el resultado? de qu manera?

22/11/2005

3/5

3 Suponed que se quiere que el cdigo del proceso hijo sea un programa separado (programa_hijo). Escribe el cdigo de ese programa, y elimina y aade en el programa_padre las lneas necesarias para que el comportamiento del cdigo inicial no cambie (se valorar que el nmero de cambios sea el menor posible). Indica claramente el nmero de lnea afectada y la modicacin que hagas.

22/11/2005

4/5

Pregunta 3.-

(3 puntos)

Suponed que tenis un programa (encriptador) que encripta lnea a lnea lo que recibe por su entrada estndard, mientras la lectura no le devuelva 0, y muestra el resultado por su salida estndard. Escribid un programa que reciba como parmetro el nombre del fichero fuente y el nombre del fichero destino, y guarde en el fichero destino cada lnea del fichero fuente seguida de la misma lnea encriptada (podis suponer que una lnea encriptada tiene el mismo nmero de caracteres que la lnea sin encriptar). Para ello el programa crear un proceso hijo que ejecutar el programa encriptador y con el que se comunicar mediante las pipes ordinarias que sean necesarias.

22/11/2005

5/5

Anda mungkin juga menyukai