funcion c unix system man

funcion system()



¿Cuál es la diferencia entre "llamadas al sistema C" y "rutinas de la biblioteca C"? (5)

Hay varias secciones en las páginas de manual. Dos de ellos son:

2 Unix and C system calls 3 C Library routines for C programs

Por ejemplo, hay getmntinfo(3) y getfsstat(2) , ambos parecen que hacen lo mismo. ¿Cuándo debería uno usar cuál y cuál es la diferencia?


Como regla general, siempre debe usar la versión de la biblioteca C. A menudo tienen envoltorios que manejan cosas esotéricas como reinicios en una señal (si usted lo ha solicitado). Esto es especialmente cierto si ya se ha vinculado con la biblioteca. Todas las reglas tienen razones para romperse. Razones para usar las llamadas directas

  1. Quieres ser libc agnóstico; Tal vez con un instalador. Dicho código podría ejecutarse en Android ( bionic ), uClibc y sistemas glibc / eglibc más tradicionales, independientemente de la biblioteca utilizada. Además, carga dinámica con envoltorios para crear una capa glibc / biónica en tiempo de ejecución que permite un doble binario Android / Linux.
  2. Necesitas un rendimiento extremo. Aunque esto es probablemente raro y muy probablemente equivocado. Probablemente, repensar el problema dará mejores beneficios de rendimiento y no llamar al sistema suele ser una ganancia de rendimiento, que la libc puede ocasionalmente.
  3. Está escribiendo algunos initramfs o código init sin una biblioteca; para crear una imagen más pequeña o arrancar más rápido.
  4. Está probando un kernel / plataforma nuevo y no quiere complicar la vida con un sistema de archivos completo; muy similar al initramfs .
  5. Desea hacer algo muy rápido al iniciar el programa, pero eventualmente quiere usar las rutinas de libc .
  6. Para evitar un error conocido en la libc .
  7. La funcionalidad no está disponible a través de libc .

Lo sentimos, la mayoría de los ejemplos son específicos de Linux, pero los racionales deberían aplicarse a otras variantes de Unix. El último elemento es bastante común cuando se introducen nuevas características en un kernel. Por ejemplo, cuando kqueue o epoll introdujeron por primera vez, no había libc para epoll . Esto también puede suceder si el sistema tiene una biblioteca más antigua, pero un kernel más nuevo y desea usar esta funcionalidad.

Si su proceso no ha utilizado la libc , lo más probable es que algo en el sistema tenga. Al codificar sus propias variantes, puede negar la memoria caché al proporcionar dos rutas para el mismo objetivo final. Además, Unix compartirá las páginas de códigos entre procesos. En general, no hay ninguna razón para no usar la versión de libc .

Otras respuestas ya han hecho un trabajo estelar en la diferencia entre libc y llamadas al sistema.


Las bibliotecas de funciones comunes se crean sobre la interfaz de llamada del sistema, pero las aplicaciones son gratuitas.

Las llamadas al sistema son como las claves de autenticación que tienen acceso para usar los recursos del kernel.

La imagen de arriba es de programación avanzada de Linux y ayuda a comprender cómo las aplicaciones de usuario interactúan con kernel.


Las llamadas al sistema son funciones del sistema operativo, como en UNIX, la función malloc() se construye sobre la llamada al sistema sbrk() (para cambiar el tamaño del espacio de memoria del proceso).

Las bibliotecas son solo códigos de aplicaciones que no forman parte del sistema operativo y que a menudo estarán disponibles en más de un sistema operativo. Básicamente son lo mismo que llamadas de función dentro de su propio programa.

La línea puede ser un poco borrosa, pero solo ve las llamadas del sistema como funcionalidad a nivel kernel.


Las llamadas al sistema son la interfaz entre el código de nivel de usuario y el kernel. C Las rutinas de la biblioteca son llamadas a la biblioteca como cualquier otra, simplemente son comúnmente provistas (más o menos universalmente). Muchas de las rutinas estándar de la biblioteca son envoltorios (delgados o no) de las llamadas al sistema, lo que tiende a difuminar un poco la línea.

En cuanto a cuál usar, como regla general, use el que mejor se adapte a sus necesidades.


Las llamadas descritas en la sección 2 del manual son todas envolturas relativamente delgadas sobre las llamadas reales a los servicios del sistema que atrapan al kernel. Las rutinas de la biblioteca estándar C descritas en la sección 3 del manual son funciones de la biblioteca del lado del cliente que pueden o no usar llamadas al sistema.

Esta publicación tiene una descripción de las llamadas al sistema y la captura al kernel (en un contexto ligeramente diferente) y explica el mecanismo subyacente detrás de las llamadas al sistema con algunas referencias.