Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

440
Vistas
¿Las llamadas a funciones como read() , write() son llamadas al sistema reales en Linux?

He estado escribiendo programas en C/C++ que hacen uso de la API de Linux y realizan llamadas al sistema como fork(), read(), write(), etc. Ahora, empiezo a preguntarme si estas funciones de biblioteca son en realidad llamadas al sistema. o son algún tipo de funciones de envoltura.

¿Qué sucede realmente cuando un programa hace una llamada a write() ? ¿Cómo interactúa esta función con el núcleo? Si esto es un envoltorio, ¿por qué lo necesitamos?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Todas estas funciones son funciones de espacio de usuario reales en libc.so para que su binario esté vinculado. Pero la mayoría de ellos son solo pequeños envoltorios para syscalls que son la interfaz entre el espacio de usuario y el kernel (ver también syscall(2) ).

Tenga en cuenta que las funciones que son puramente espacio de usuario (como fmod(3) ) o hacen algunas cosas en el espacio de usuario además de llamar al kernel (como execl(3) ) tienen sus páginas de manual en la sección 3, mientras que las funciones que solo llaman al kernel (como read(2) ) las tienen en el apartado 2.

over 4 years ago · Santiago Trujillo Denunciar

0

usando este sencillo código:

 int main() { int f = open("/tmp/test.txt", O_CREAT | O_RDWR, 0666); write(f, "hello world", 11); close(f); return 0; }

puede usar strace para encontrar llamadas al sistema utilizadas en el archivo binario:

 gcc test.c -o test strace ./test

el resultado es algo como esto:

 . . . open("/tmp/test.txt", O_RDWR|O_CREAT, 0666) = 3 write(3, "hello world", 11) = 11 close(3) = 0 exit_group(0) = ?

en cuanto a fork() , en realidad es un envoltorio alrededor de la llamada al sistema clone()

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda