Scroll to navigation

INTRO(2) Manual do Programador do Linux INTRO(2)

NOME

intro - introdução às chamadas do sistema

DESCRIÇÃO

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).

VALOR DE RETORNO

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).

DE ACORDO COM

Certos termos e abreviações são usados para indicar variantes e padrões UNIX aos quais as chamadas nesta seção estão em conformidade. Vejo standards(7).

NOTAS

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).

Autores e condições de direitos autorais

Veja o cabeçalho do código-fonte da página de manual para o(s) autor(es) e condições de direitos autorais. Note que estes podem ser diferentes de página para página!

VEJA TAMBÉM

_syscall(2), syscall(2), syscalls(2), errno(3), intro(3), capabilities(7), credentials(7), feature_test_macros(7), mq_overview(7), path_resolution(7), pipe(7), pty(7), sem_overview(7), shm_overview(7), signal(7), socket(7), standards(7), system_data_types(7), symlink(7), sysvipc(7), time(7)

COLOFÃO

Esta página faz parte da versão 5.10 do projeto Linux man-pages. Uma descrição do projeto, informações sobre relatórios de bugs e a versão mais recente desta página podem ser encontradas em https://www.kernel.org/doc/man-pages/.

TRADUÇÃO

A tradução para português brasileiro desta página man foi criada por Rafael Fontenelle <rafaelff@gnome.org>

Esta tradução é uma documentação livre; leia a Licença Pública Geral GNU Versão 3 ou posterior para as condições de direitos autorais. Nenhuma responsabilidade é aceita.

Se você encontrar algum erro na tradução desta página de manual, envie um e-mail para a lista de discussão de tradutores.

1 novembro 2020 Linux