在 Alpine Linux 上构建我的项目(使用 musl libc)并从编译器中收到错误: <sys/unistd.h> 未找到;musl libc 没有 <sys/unistd.h>。我将 include 行更改为 #include <unistd.h> 并且它编译成功(仍然有功能无法正常工作)。我对 <unistd.h> 和 <sys/unistd.h> 之间的差异感到好奇,但在 Google 上找不到任何答案;有一个关于不同 unistd.h 的堆栈溢出问题,但所有答案甚至没有提及有关 unistd.h 的任何内容
该
unistd.h
文件在 POSIX 系统(Linux、UNIX、MacOS 等)上很常见,并且包含这些系统上使用的函数和宏的声明。sys/unistd.h
很可能是旧系统的残余。在 CentOS 上,该文件仅包含#include <unistd.h>
. 它在基于 Alpine 或 Debian 的系统上不存在。规则是 sys 目录中的头文件应该包含 Linux 系统调用的头文件,例如
ETC
unistd 包含许多系统调用函数声明,因此将其放在该目录中是合乎逻辑的