La diferencia entre las llamadas al sistema Linux y las llamadas a la función de biblioteca

  
 Hay dos formas de manipular archivos en Linux: llamadas de sistema y funciones de biblioteca. Puede consultar "Programación de Linux" (original en inglés "Principiante de programación de Linux" de Neil Matthew y Richard Stones) Capítulo 3: Trabajar con archivos. La llamada al sistema en realidad se refiere al nivel más bajo de una llamada, en la programación de Linux es el significado de la llamada subyacente. Está orientado hacia el hardware. La llamada a la función de biblioteca está orientada al desarrollo de aplicaciones, que es equivalente a la api de la aplicación. Hay muchas razones para esto. Primero, la implementación de la tecnología de doble buffer. Segundo, la portabilidad. En tercer lugar, algunos de los defectos de rendimiento de la llamada subyacente en sí. Cuarto: Permitir que las API también tengan nivel y trabajo especializado orientado.
1,
llamada al sistema las funciones de llamada del sistema proporcionados como abrir, cerrar, leer, escribir, ioctl, etc., necesitan incluir el archivo de cabecera unistd.h. Tomemos como ejemplo la escritura: su prototipo de función es size_t write (int fd, const void * buf, size_t nbytes), su objeto operativo es el descriptor de archivos o el manejador de archivos fd (descriptor de archivos), para escribir un archivo, primero debe Permiso de escritura Abre un archivo con la llamada de sistema abierto y obtiene el fd del archivo abierto, por ejemplo fd = open (\\ " /dev /video \\ ", O_RDWR). Fd es un valor entero. Para cada nuevo archivo abierto, el fd obtenido es el máximo actual fd más uno. El sistema Linux asigna tres valores de descriptor de archivo por defecto: entrada estándar 0, salida estándar 1, error estándar 2.
Las llamadas al sistema generalmente se usan para el acceso a archivos de bajo nivel, como el acceso directo a los archivos del dispositivo en el controlador.
Las llamadas al sistema están relacionadas con el sistema operativo, por lo que generalmente no hay portabilidad entre los sistemas operativos
.
Las llamadas al sistema se producen en el espacio del kernel, por lo que si utiliza las llamadas del sistema para operaciones de archivos en una aplicación general en el espacio del usuario, existe una sobrecarga para el espacio del usuario para el cambio del espacio del kernel. De hecho, incluso si utiliza una función de biblioteca para manipular un archivo en el espacio de usuario, dado que el archivo siempre existe en el medio de almacenamiento, la operación del hardware (memoria), ya sea una operación de lectura o escritura, provocará inevitablemente una llamada al sistema. En otras palabras, la operación de la función de biblioteca en el archivo se implementa a través de una llamada al sistema. Por ejemplo, la función de la biblioteca C fwrite () se implementa mediante la llamada al sistema write ().
En este caso, el uso de las funciones de la biblioteca también tiene la sobrecarga de las llamadas al sistema, ¿por qué no usar las llamadas al sistema directamente? Esto se debe a que los archivos de lectura y escritura suelen ser grandes cantidades de datos (esto es una gran cantidad de operaciones de datos en relación con las llamadas al sistema del controlador subyacente), en cuyo caso la cantidad de llamadas al sistema puede reducirse en gran medida mediante el uso de funciones de biblioteca. Este resultado se debe a la tecnología buffer. En el espacio de usuario y en el espacio del núcleo, los búferes se utilizan para operaciones de archivos. Por ejemplo, al escribir archivos con fwrite primero se escriben los contenidos en el búfer de espacio de usuario. Cuando el búfer de espacio de usuario está lleno o la operación de escritura finaliza, el usuario almacena en búfer el usuario. Los contenidos del área se escriben en el búfer del kernel. Por la misma razón, los contenidos del búfer del kernel se escriben en el medio de hardware correspondiente al archivo cuando el búfer del kernel está lleno o al final de la escritura.
2,
función de la biblioteca estándar de C llama a la función de la biblioteca, como las funciones de manipulación de archivos fopen, fread, fwrite, FCLOSE, fflush, fseek etc., debe contener el archivo de cabecera stdio.h. Tome fwrite como ejemplo. El prototipo de la función es size_t fwrite (const void * buffer, size_t size, size_t item_num, FILE * pf). El objeto de operación es el puntero del archivo FILE * pf. Para escribir un archivo, primero debe tener permiso de escritura. Abra un archivo con la función fopen y obtenga el puntero de estructura de ARCHIVO pf del archivo abierto, por ejemplo, pf = fopen (\\ " ~ /proj /filename \\ ", \\ " w \\ "). De hecho, dado que la operación de la función de biblioteca en el archivo finalmente se realiza mediante la llamada al sistema, el puntero de la estructura de ARCHIVO que se obtiene al abrir cada archivo tiene un descriptor de archivo de espacio de kernel fd correspondiente. También hay correspondientes punteros FILE predefinidos: entrada estándar estándar, salida estándar estándar, error estándar estándar.
Las llamadas a funciones de la biblioteca se utilizan normalmente para acceder a archivos generales en una aplicación.
Las llamadas a la función de biblioteca son independientes del sistema y, por lo tanto, portátiles.
Dado que las llamadas a la función de biblioteca se basan en la biblioteca C, no es posible operar en el dispositivo en el controlador de espacio del núcleo.
※ biblioteca llama a la llamada al sistema llamado sistema de bibliotecas VS en todas las versiones del compilador ANSI C, funciones de biblioteca C es el mismo sistema llama a cada sistema operativo fue una biblioteca diferente que llama el Programa (o función) El servicio que llama al kernel del sistema está asociado con el programa del usuario. Un punto de entrada del sistema operativo se ejecuta en el espacio de direcciones del usuario. El tiempo de ejecución de este en el espacio de direcciones del kernel pertenece a " tiempo del usuario "; su tiempo de ejecución pertenece a &" El tiempo del "sistema" pertenece al procedimiento, la sobrecarga de llamadas es pequeña, es necesario cambiar entre el espacio del usuario y el contexto del kernel, la sobrecarga es grande. Hay alrededor de 300 funciones en la biblioteca de funciones C libc en UNIX. Un sistema de llamada típica de 90 llamadas a las bibliotecas C: sistema fprintf malloc llamada típica del sistema: chdir BRK escritura tenedor;
Copyright © Conocimiento de Windows All Rights Reserved