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 utilizar las llamadas directas,
- Usted quiere 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.
- Necesita un rendimiento extremo. Aunque esto es probablemente raro y muy probablemente equivocado.Probablemente, repensar el problema proporcionará mejores beneficios de rendimiento y no llamando al sistema suele ser una ganancia de rendimiento, que el
libc
puede ocasionalmente hacer.
- Usted está escribiendo un código
initramfs
o init
sin una biblioteca; para crear una imagen más pequeña o arrancar más rápido.
- Está probando una nueva kernel/plataforma y no quiere complicar la vida con un sistema de archivos completo; muy similar al
initramfs
.
- Desea hacer algo muy rápidamente al iniciar el programa, pero finalmente desea utilizar las rutinas
libc
.
- Para evitar un error conocido en el
libc
.
- La funcionalidad no está disponible a través del
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 se introdujo por primera vez kqueue
o epoll
, no hubo libc
para admitirlos. 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 el libc
, lo más probable es que tenga algo en el sistema. 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 los procesos. En general, no hay ninguna razón para no utilizar la versión libc
.
Otras respuestas ya han hecho un trabajo estelar en la diferencia entre libc
y llamadas al sistema.
awesome pic. muy claro – henryyao