intro(2) — manpages-pt-br — Debian bullseye — Debian Manpages
/ bullseye / manpages-pt-br / intro(2)
INTRO(2) Manual do Programador do Linux INTRO(2)
intro - introdução às chamadas do sistema
A seção 2 do manual descreve as chamadas do sistema Linux. Uma chamada do sistema é um ponto de entrada no kernel do Linux. Geralmente, as chamadas do sistema não são chamadas diretamente: em vez disso, a maioria das chamadas do sistema tem funções wrappers correspondentes de bibliotecas C que executam as etapas necessárias (por exemplo, interceptar no modo kernel) para chamar a chamada do sistema. Portanto, fazer uma chamada do sistema é o mesmo que chamar uma função normal da biblioteca.
Em muitos casos, a função wrapper de biblioteca C não faz nada além de:
copiar argumentos e o número de chamadas do sistema exclusivas para os registradores em que o kernel os espera;
interceptar no modo kernel, quando o kernel faz o trabalho real da chamada do sistema;
definir errno se a chamada do sistema retornar um número de erro quando o kernel retornar a CPU ao modo de usuário.
No entanto, em alguns casos, uma função wrapper pode fazer muito mais do que isso, por exemplo, executando algum pré-processamento dos argumentos antes de capturar no modo kernel ou pós-processamento de valores retornados pela chamada do sistema. Nesse caso, as páginas de manual da Seção 2 geralmente tentam observar os detalhes da interface da API da biblioteca C (geralmente GNU) C e da chamada bruta do sistema. Geralmente, a DESCRIÇÃO principal se concentrará na interface da biblioteca C, e as diferenças para a chamada do sistema são abordadas na seção NOTAS.
Para obter uma lista das chamadas do sistema Linux, consulte syscalls(2).
Em caso de erro, a maioria das chamadas do sistema retorna um número de erro negativo (ou seja, o valor negado de uma das constantes descritas em errno(3)). O wrapper da biblioteca C oculta esse detalhe do chamador: quando uma chamada do sistema retorna um valor negativo, o wrapper copia o valor absoluto na variável errno e retorna -1 como o valor de retorno do wrapper.
O valor retornado por uma chamada de sistema bem-sucedida depende da chamada. Muitas chamadas do sistema retornam 0 em caso de êxito, mas algumas podem retornar valores diferentes de zero de uma chamada bem-sucedida. Os detalhes estão descritos nas páginas individuais do manual.
Em alguns casos, o programador deve definir uma macro de teste de recurso para obter a declaração de uma chamada do sistema a partir do arquivo de cabeçalho especificado na seção SINOPSE da página man. (Onde necessário, essas macros de teste de recursos devem ser definidas antes da inclusão de qualquer arquivo de cabeçalho.) Nesses casos, a macro necessária é descrita na página man. Para obter mais informações sobre macros de teste de recursos, consulte feature_test_macros(7).
Chamando diretamente¶
Na maioria dos casos, é desnecessário invocar uma chamada do sistema diretamente, mas há momentos em que a biblioteca Standard C não implementa uma boa função de wrapper para você. Nesse caso, o programador deve chamar manualmente a chamada do sistema usando syscall(2). Historicamente, isso também era possível usando uma das macros _syscall descritas em _syscall(2).