Llamadas al sistema (2)alram/SO/clase06.pdf · Llamadas al SO de administración de archivos. La...

18
Llamadas al sistema (2) Dr. Alonso Ramírez Manzanares 1-Sep-2009

Transcript of Llamadas al sistema (2)alram/SO/clase06.pdf · Llamadas al SO de administración de archivos. La...

Page 1: Llamadas al sistema (2)alram/SO/clase06.pdf · Llamadas al SO de administración de archivos. La llamada clásica para creación de archivos: fd = creat(“abc”,0751); Se usa el

Llamadas al sistema (2)Dr. Alonso Ramírez Manzanares

1-Sep-2009

Page 2: Llamadas al sistema (2)alram/SO/clase06.pdf · Llamadas al SO de administración de archivos. La llamada clásica para creación de archivos: fd = creat(“abc”,0751); Se usa el

Ejemplo de un shell mínimo

Un ejemplo en el comando $cp arch1 arch2que usa en su interior main(argc, argv,envp)

Page 3: Llamadas al sistema (2)alram/SO/clase06.pdf · Llamadas al SO de administración de archivos. La llamada clásica para creación de archivos: fd = creat(“abc”,0751); Se usa el

Ejemplo de manejo de procesos

Page 4: Llamadas al sistema (2)alram/SO/clase06.pdf · Llamadas al SO de administración de archivos. La llamada clásica para creación de archivos: fd = creat(“abc”,0751); Se usa el

Ejemplo de manejo de procesos

Page 5: Llamadas al sistema (2)alram/SO/clase06.pdf · Llamadas al SO de administración de archivos. La llamada clásica para creación de archivos: fd = creat(“abc”,0751); Se usa el

Ejemplo de manejo de procesos

Page 6: Llamadas al sistema (2)alram/SO/clase06.pdf · Llamadas al SO de administración de archivos. La llamada clásica para creación de archivos: fd = creat(“abc”,0751); Se usa el

Ejemplo de manejo de procesos

Page 7: Llamadas al sistema (2)alram/SO/clase06.pdf · Llamadas al SO de administración de archivos. La llamada clásica para creación de archivos: fd = creat(“abc”,0751); Se usa el

Llamadas al SO de administración de archivos.

La llamada clásica para creación de archivos:

fd = creat(“abc”,0751);

Se usa el descriptor (handle, manejador, mango, etc) de archivo devuelto, fd, para escribir el archivo o cerrarlo.

Esta llamada es obsoleta, ahora se usa OPEN que tambien crea archivos.

Page 8: Llamadas al sistema (2)alram/SO/clase06.pdf · Llamadas al SO de administración de archivos. La llamada clásica para creación de archivos: fd = creat(“abc”,0751); Se usa el

Llamadas al SO de administración de archivos.

Los archivos especiales se crean con:

fd = mkmod(“/dev/ttyc2”,020744,0x0402);

donde, por ejemplo, le asigna el modo rwxr--r--. El tercer parametro indica dispositivo principal (2) y secundario (4).

Esto solo lo puede hacer el superusuario.

Page 9: Llamadas al sistema (2)alram/SO/clase06.pdf · Llamadas al SO de administración de archivos. La llamada clásica para creación de archivos: fd = creat(“abc”,0751); Se usa el

Llamadas al SO de administración de archivos.Cuando se cierra un archivo con CLOSE, el descriptor de archivo (el #) queda disponible para uso subsecuente con OPEN.

Las funciones mas utilizadas son READ y WRITE. Cuales son sus parametros?

Tambien e puede tener acceso aleatorio a un archivo, para eso tenemos la función:

off_t lseek(int fd, off_t offset, int whence)

donde whence indica principio, posición actual, o posición final del archivo.

Page 10: Llamadas al sistema (2)alram/SO/clase06.pdf · Llamadas al SO de administración de archivos. La llamada clásica para creación de archivos: fd = creat(“abc”,0751); Se usa el

Llamadas al SO de administración de archivos.Para cada archivo, Minix guarda su status, el cual podemos accesar con STAT y FSTAT, que regresan

La diferencia es que uno usa el nombre de archivo y el otro el descriptor de archivo, lo cual es útil porque a veces no tenemos el nombre (por ejemplo en STDIO).

Page 11: Llamadas al sistema (2)alram/SO/clase06.pdf · Llamadas al SO de administración de archivos. La llamada clásica para creación de archivos: fd = creat(“abc”,0751); Se usa el

Llamadas al SO de administración de archivos.El uso de DUP: deseamos cerrar salida standard, poner otro archivo como salida standar, escribir y luego reestablecer la situacion original.

Primero hacemos

fd = dup(1); //1 es salida standard, fd corresponde a esa

luego podemos cerrar salida standard, y usar un nuevo archivo, finalmente, para restablecer hacemos:

n = dup(fd); //asigna descriptor mas bajo (1) al archivo fd

Por último cerramos fd y estamos como al principio.

Page 12: Llamadas al sistema (2)alram/SO/clase06.pdf · Llamadas al SO de administración de archivos. La llamada clásica para creación de archivos: fd = creat(“abc”,0751); Se usa el

Llamadas al SO de administración de archivos.

También podemos hacer que un descriptor de archivo no asignado se refiera a un archivo ya abierto:

dup2(fd,fd2);

Podemos usar esto para que otro descriptor de archivo (n), se refiera también a la salida estandard.

Page 13: Llamadas al sistema (2)alram/SO/clase06.pdf · Llamadas al SO de administración de archivos. La llamada clásica para creación de archivos: fd = creat(“abc”,0751); Se usa el

Llamadas al SO de administración de archivos.La comunicación entre procesos se hace con pipes (conductos):

cat arch1 arch2 | sort

aquí el shell crea un conducto, de tal forma que el primer programa escribe en el y el segundo lee de él. Esto lo hacemos como

pipe(&fd[0]);

donde fd es un arreglo de 2 descriptores de archivo para leer y escribir, respectivamente.

Page 14: Llamadas al sistema (2)alram/SO/clase06.pdf · Llamadas al SO de administración de archivos. La llamada clásica para creación de archivos: fd = creat(“abc”,0751); Se usa el

Llamadas al SO de administración de archivos.

Regularmente, despues de hacer un pipe viene un fork:

Page 15: Llamadas al sistema (2)alram/SO/clase06.pdf · Llamadas al SO de administración de archivos. La llamada clásica para creación de archivos: fd = creat(“abc”,0751); Se usa el

Llamadas al SO de administración de archivos.Podemos cambiar el modo de operación de archivos especiales, en especial de terminales con IOCTL

Existen 3 modos:

Modo Cocked (cocido), donde CTRL-S CTRL-Q pueden detenerse e iniciar la salida de la terminal, CTRL-D es fin de archivo, DEL genera señal de interrupción y CTRL-\ genera señal QUIT. Las líneas son mandadas hasta el ENTER.

Modo Raw (crudo), donde todos los caracteres se pasan directamente al programa sin ningun procesamiento. Se tiene acceso a lineas de entrada parciales.

Modo cbreak (intermedio), solo CTRL-S, CTRL-Q, DEL y CTRL-\ están habiltados. Se tiene aceso a líneas de entrada parciales.

Page 16: Llamadas al sistema (2)alram/SO/clase06.pdf · Llamadas al SO de administración de archivos. La llamada clásica para creación de archivos: fd = creat(“abc”,0751); Se usa el

Llamadas al SO de administración de archivos.

La llamda al sistema ACCESS nos dice si el sistema de protección permite cierto acceso a un archivo:

int access(const char* path , mode_t mode)

donde podemos checar R_OK, W_OK, X_OK, o bien si el path es correcto, se puede accesar y el archivo existe con F_OK.

La respuesta es 0 (ok) o -1.

Page 17: Llamadas al sistema (2)alram/SO/clase06.pdf · Llamadas al SO de administración de archivos. La llamada clásica para creación de archivos: fd = creat(“abc”,0751); Se usa el

Llamadas al SO de administración de directorios.

MKDIR y RMDIR crean y eliminan directorios respectivamente.

LINK hace posible que el mismo archivo aparezca con 2 o más nombres (un uso típico es compartir información).

Para pasar de (a) a (b) tecleamos:

link(“/usr/jim/memo”,”/usr/ast/note”);

Page 18: Llamadas al sistema (2)alram/SO/clase06.pdf · Llamadas al SO de administración de archivos. La llamada clásica para creación de archivos: fd = creat(“abc”,0751); Se usa el

Llamadas al SO de administración de directorios.

Cada archivo en MINX tienen un identificador numérico único i-number, es un índice en la tabla de i-nodes, uno por archivo, que indican quién es el dueño del archivo, donde están sus bloques de disco, etc.

De esta manera un directorio es un archivo con un conjunto de pares [i-number, nombre ASCII].

Si dos entradas tienen el mismo i-number, y alguna de ellas se elimina (usando ULINK) la otra permanece, pero cuando la segunda se borre, el SO eliminará el archivo del disco (un campo del i-node indica cuantas entradas de directorio apuntan al archivo).