Mientras revisaba las funciones estándar de la biblioteca de C ( glibc ), descubrí que printf() en realidad llama a las funciones puts() ( _IO_puts ). Pero no puedo averiguar cómo la función puts realmente escribe en la salida stdout .
¿Utiliza la llamada al sistema write() definida en unistd.h algo más? Una cosa que descubrí es que puts() en realidad llama a _IO_xputn a través _IO_putn .
Por favor ayuda. Gracias.
Para los sistemas basados en Unix de los que Linux forma parte, la mayoría de las funciones de la biblioteca stdio son contenedores que están una capa por encima de las llamadas del sistema de E/S estándar. Verá, el sistema operativo proporciona un conjunto de API llamadas llamadas al sistema. Las aplicaciones no pueden acceder directamente a los recursos de hardware y, por lo tanto, suelen llamar a estas "llamadas al sistema" cada vez que necesitan hacer algo privilegiado, como escribir en la pantalla o leer desde el teclado.
En Unix, todo se abstrae como un archivo, por lo que siempre que necesite escribir caracteres en una pantalla, todo lo que necesita hacer es abrir algún archivo que represente la "pantalla" y escribir esos caracteres allí. El núcleo se encargará del resto. Sencillamente, así es como harías esto en C:
#include <unistd.h> #include <fcntl.h> #include <stdlib.h> #define BUFF_SIZE 2 int main() { int terminal; char buffer[BUFF_SIZE] = "C\n"; // This will store the character to print + new line terminal = open("/dev/tty", O_WRONLY); // systemcall to open terminal if (terminal < 0) exit(1); // some error happened dup2(terminal, STDOUT_FILENO); // use our newly opened terminal as default Standard output if (write(terminal, buffer, BUFF_SIZE) != BUFF_SIZE) // systemcall to write to terminal exit(1); // We couldn't write anything }Esto solo muestra que todo en stdio está superpuesto a las llamadas básicas del sistema de E/S. Estas llamadas al sistema son lectura, escritura, apertura, etc. Si desea obtener más información sobre las llamadas al sistema y algunos aspectos internos del sistema operativo, lea el libro "Tres piezas fáciles" de Andrea Arpaci-Dusseau.