Archivos de dispositivos Linux y archivos normales

  

Muchas personas piensan que los archivos son algunos de los datos almacenados en el disco, pero Linux utiliza un enfoque más abstracto. Resumen el dispositivo en un archivo. Un archivo de dispositivo tiene el mismo nombre de archivo, otro número de inodo, un propietario de archivo, un conjunto de bits de permiso y la hora de modificación más reciente, como un archivo normal. Todo lo que normalmente se entiende sobre el archivo se aplicará al terminal y otros dispositivos.

Los archivos ordinarios, es decir, los archivos de disco comúnmente utilizados están compuestos de bytes, y el número de bytes en el archivo de disco es el tamaño del archivo. El archivo del dispositivo es un enlace, no un contenedor. El teclado y el mouse no almacenan clics :) El i-nodo del archivo del dispositivo almacena un puntero a una subrutina del kernel, no el tamaño del archivo y la lista de almacenamiento. Una subrutina que transfiere datos de dispositivo en el kernel se denomina controlador de dispositivo.

La diferencia en el tipo de archivo se refleja en el i-node:

El i-node del archivo de disco contiene una lista de punteros al bloque de datos.

El i-node del archivo de dispositivo contiene un puntero al núcleo. Indicadores de controlador de dispositivo

Conexiones de disco y Conexiones de dispositivo

Las conexiones a archivos de disco generalmente contienen un búfer de núcleo, una propiedad como una conexión de disco con un búfer. La conexión al terminal es diferente, y el proceso debe transferir los datos lo antes posible.

En otras palabras, las propiedades de conexión de los dos son diferentes. Para una conexión específica de archivo y dispositivo, puede pensar en: 1. ¿Qué propiedades están conectadas? 2. ¿Cómo detectar el atributo actual? 3. ¿Cómo cambiar el atributo actual?

La respuesta a 2 y 3 es usar la llamada del sistema fcntl, el atributo del descriptor de archivo está codificado en un bit entero. Fcntl controla el descriptor de archivo leyendo y escribiendo los bits enteros.

Por ejemplo:

# include < fcntl.h >

int s;

s = fcntl (fd, F_GETFL);

s | = OSYNC;

resultado = fcntl (fd, F_SETFL, s);

Lea la configuración del kernel a las variables, modifique el valor de la variable, devuelva la configuración al kernel, lea en Linux y Una forma típica de modificar las propiedades de conexión.

fcntl no es la única forma de configurar las propiedades del descriptor de archivos. Por lo general, cuando abre un archivo, debe saber qué configuraciones necesita. El sistema puede establecer las propiedades del descriptor de archivo llamando a una parte del segundo parámetro de abierto.

Tales como: fd = open (FILE, OWRONLY |  O_APPEND |  O_SYNC);

Copyright © Conocimiento de Windows All Rights Reserved