Sistemas operativos modernos
Bloqueo compartido dei proceso A 0 1 2 3 ü H 11Él 8 9 10 11 12 13 14 15 Bloqueo compartido de A 0 1 2 3 ilIIIMSI 10 11 12 13 14 15 Bloqueo compartido de B A B r t 0 - 3 - K \ \ xXK>0 =1 = =11= 12 13 14 15 (a) (b) Bloqueo compartido de C Figura 10-27. a) Archivo con un bloqueo, b) Adición de un segundo bloqueo, c) Un tercer bloqueo. La llamada creat no sólo crea un nuevo archivo, sino que también lo abre para escritura. Para que llamadas al sistema subsiguientes puedan tener acceso al archivo, un creat exitoso devuelve como resultado un entero no negativo pequeño llamado descriptor de archivo,/<i en el ejemplo anterior. Si se ejecuta creat con un archivo existente, ese archivo se trunca a la lon gitud Oy se desecha su contenido. Sigamos examinando las principales llamadas al sistema, que se enumeran en la figura 10-28. Para leer o escribir un archivo existente, primero debe abrirse el archivo con open. Esta llamada especifica el nombre del archivo que se abrirá y cómo debe abrirse: para leer, para es cribir o para ambas cosas. También pueden especificarse diversas opciones. Al igual que creat, la llamada open devuelve un descriptor de archivo que puede usarse para leer o escribir. Des pués, el archivo puede cerrarse con close, lo cual deja el descriptor de archivo disponible para reufilizarse con un creat u open posterior. Ambas llamadas, creat y open, siempre devuelven el descriptor de archivo de número más bajo que no se esté usando en ese momento. Cuando un programa comienza a ejecutarse de la forma normal, los descriptores de archi vo O, 1 y 2 ya están asignados a la entrada estándar, a la salida estándar y al error estándar, res pectivamente. Así, un filtro como el programa sort puede leer sus entradas del descriptor de archivo Oy escribir sus salidas en el descriptor de archivo 1 sin tener que saber qué archivos son. Este mecanismo funciona porque el shell se encarga de que dichos valores se refieran a los archivos correctos (redirigidos) antes de que se inicie el programa. Las llamadas que más se usan son sin duda read y write. Cada una tiene tres parámetros: un descriptor de archivo (que indica cuál archivo abierto hay que leer o escribir), una dirección de búfer (que indica dónde deben ponerse los datos o de dónde deben tomarse), y una cuenta
RkJQdWJsaXNoZXIy MjI4NDcx