Na minha compreensão, a chamada de sistema aberta e fechada parece muito relacionada.
- ambos lidam com arquivos
- disponível na maioria dos sabores de unix (? existe algum unix que não os apresente?)
Portanto, esperava encontrá-los declarados no arquivo de /usr/include/unistd.h
cabeçalho. No entanto - estranhamente - há apenas "fechar", mas nenhum "aberto" declarado lá (no meu sistema de kernel linux 4.17)?
A omissão da chamada do sistema abertounistd.h
parece confirmada lendo o The Open Group Base Specifications Issue 7, 2018 edition
que diz no parágrafo "Declarações"
As seguintes devem ser declaradas como funções e também podem ser definidas como macros. Protótipos de função devem ser fornecidos.
int access(const char *, int);
alarme não assinado (não assinado);
int chdir(const char *);
int chown(const char *,> uid_t, gid_t);
int fechar(int);
[... mais algumas declarações, mas nenhum "aberto"]
Então - estranhamente para mim novamente - o arquivo /usr/include/asm/unistd_64.h
contém a linha
#define __NR_open 2
como se unistd.h ainda se importasse um pouco com "abertura de arquivos"?
O pano de fundo é que você precisa
para obter os
open()
sinalizadores relacionados de qualquer maneira, e deve haver uma chance de não poluir o espaço de nomes mais do que o necessário.Se
open()
estivesse emunistd.h
, esse arquivo precisaria#include
fcntl.h
e isso não é desejado como padrão.O arquivo unistd_64.h é um arquivo de inclusão interno não oficial do fornecedor e o que está dentro deste arquivo não está sujeito ao padrão POSIX.