Linux unistd.h 包含功能
unistd.h
是 POSIX 标准定义的头文件,包含了大量与 Unix/Linux 系统交互的函数声明、宏和类型定义。其功能覆盖进程控制、文件操作、输入输出、系统信息等多个方面。以下是其主要包含的功能分类及具体内容:
1. 类型定义
pid_t
: 进程ID类型(通常为int
)uid_t
: 用户ID类型gid_t
: 组ID类型off_t
: 文件偏移量类型(用于lseek
等函数)ssize_t
: 带符号的字节计数类型(用于read
/write
返回值)mode_t
: 文件权限模式类型
2. 进程控制与管理
-
进程创建与销毁
fork()
: 创建新进程(父进程返回子进程ID,子进程返回0)execve(const char *path, char *const argv[], char *const envp[])
: 替换进程镜像(执行新程序)_exit(int status)
: 立即终止进程(不执行清理操作)exit(int status)
: 终止进程(会执行清理操作,如刷新缓冲区)
-
进程ID与关系
getpid()
: 获取当前进程IDgetppid()
: 获取父进程IDgetuid()
: 获取实际用户IDgeteuid()
: 获取有效用户IDgetgid()
: 获取实际组IDgetegid()
: 获取有效组ID
-
进程暂停与等待
pause()
: 使进程暂停,直到收到信号sleep(unsigned int seconds)
: 暂停进程指定秒数usleep(useconds_t usec)
: 暂停进程指定微秒数(已被nanosleep
替代)
3. 文件与I/O操作
-
基础读写
read(int fd, void *buf, size_t count)
: 从文件描述符读取数据write(int fd, const void *buf, size_t count)
: 向文件描述符写入数据close(int fd)
: 关闭文件描述符
-
文件偏移
lseek(int fd, off_t offset, int whence)
: 移动文件读写指针(whence
可为SEEK_SET
/SEEK_CUR
/SEEK_END
)
-
文件描述符操作
dup(int fd)
: 复制文件描述符(返回最小可用新描述符)dup2(int oldfd, int newfd)
: 将oldfd
复制到newfd
(若newfd
已打开则先关闭)fcntl(int fd, int cmd, ...)
: 文件控制(如修改描述符属性、文件锁等)
-
管道创建
pipe(int pipefd[2])
: 创建匿名管道(pipefd[0]
读端,pipefd[1]
写端)
4. 目录操作
chdir(const char *path)
: 改变当前工作目录fchdir(int fd)
: 通过文件描述符改变工作目录(fd
指向目录)getcwd(char *buf, size_t size)
: 获取当前工作目录路径rmdir(const char *path)
: 删除空目录
5. 文件权限与属性
chmod(const char *path, mode_t mode)
: 修改文件权限fchmod(int fd, mode_t mode)
: 通过文件描述符修改权限chown(const char *path, uid_t owner, gid_t group)
: 修改文件所有者和组fchown(int fd, uid_t owner, gid_t group)
: 通过文件描述符修改所有者和组access(const char *path, int mode)
: 检查文件访问权限(mode
可为R_OK
/W_OK
/X_OK
/F_OK
)
6. 系统资源与限制
getpagesize()
: 获取系统页面大小sysconf(int name)
: 获取系统配置参数(如_SC_PAGESIZE
对应页面大小)ulimit(int cmd, ...)
: 获取/设置进程资源限制(如文件大小限制)
7. 其他常用功能
alarm(unsigned int seconds)
: 定时发送SIGALRM
信号getopt(int argc, char *const argv[], const char *optstring)
: 解析命令行选项isatty(int fd)
: 判断文件描述符是否指向终端sync()
: 将缓冲区数据同步到磁盘unlink(const char *path)
: 删除文件(或符号链接)
注意事项
unistd.h
是 Unix-like 系统(Linux、macOS 等)的标准头文件,Windows 系统不原生支持(需通过 Cygwin 或 MinGW 等工具模拟)。- 部分函数可能因系统版本或配置略有差异,建议结合
man
手册(如man 2 read
)查看详细用法。
这些功能是编写系统级程序、命令行工具或与操作系统交互的应用的基础。