Construindo meu projeto no Alpine Linux (use o musl libc) e recebi um erro do compilador: <sys/unistd.h> não encontrado; musl libc não tem um <sys/unistd.h>. Alterei a linha de inclusão para #include <unistd.h> e ela compila com sucesso (ainda há recursos que não funcionam). Estou curioso sobre as diferenças entre <unistd.h> e <sys/unistd.h>, mas não consigo encontrar nenhuma resposta no Google; há uma pergunta do Stack Overflow sobre diferentes unistd.h, mas todas as respostas nem mencionam nada sobre unistd.h
O
unistd.h
arquivo é comum em sistemas POSIX (Linux, UNIX, MacOS, etc.) e contém declarações de funções e macros utilizadas nesses sistemas.sys/unistd.h
é provavelmente um remanescente de sistemas mais antigos. No CentOS, este arquivo contém simplesmente#include <unistd.h>
. Não existe em sistemas baseados em Alpine ou Debian.A regra é que os arquivos de cabeçalho no diretório sys devem conter cabeçalhos para chamadas de sistema Linux como
etc.
unistd contém muitas declarações de funções de chamada de sistema, então é lógico que seja colocado nesse diretório