Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

436
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda