当前位置: 首页 > news >正文

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(): 获取当前进程ID
    • getppid(): 获取父进程ID
    • getuid(): 获取实际用户ID
    • geteuid(): 获取有效用户ID
    • getgid(): 获取实际组ID
    • getegid(): 获取有效组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)查看详细用法。

这些功能是编写系统级程序、命令行工具或与操作系统交互的应用的基础。

http://www.lryc.cn/news/625012.html

相关文章:

  • Spring 三级缓存:破解循环依赖的底层密码
  • 使用Idea安装JDK
  • [Code Analysis] docs | Web应用前端
  • 计算机视觉(9)-实践中遇到的问题(六路相机模型采集训练部署全流程)
  • OpenTelemetry、Jaeger 与 Zipkin:分布式链路追踪方案对比与实践
  • 大模型的底层运算线性代数
  • 关系型数据库与非关系型数据库
  • 母猪姿态转换行为识别:计算机视觉与行为识别模型调优指南
  • 我的 LeetCode 日记:Day 9 - 字符串终章与 KMP 算法
  • Baumer高防护相机如何通过YoloV8深度学习模型实现手势识别和指尖检测识别(C#代码UI界面版)
  • 第十六届蓝桥杯青少组C++省赛[2025.8.10]第二部分编程题(6、魔术扑克牌排列)
  • 算法题——字符串
  • RecSys:排序中的融分公式与视频播放建模
  • OVS:ovn为什么默认选择Geneve作为二层隧道网络协议?
  • 【EI会议征稿通知】第五届高性能计算、大数据与通信工程国际学术会议(ICHBC 2025)
  • 人工智能与生物科技的融合:重塑生命未来的无限可能​
  • android 实现表格效果
  • 力扣(LeetCode) ——100. 相同的树(C语言)
  • Rust 异步中的 Waker
  • PMP-项目管理-十大知识领域:资源管理-管理团队、设备、材料等资源
  • OpenCV Python——Numpy基本操作(Numpy 矩阵操作、Numpy 矩阵的检索与赋值、Numpy 操作ROI)
  • 3D检测笔记:基础坐标系与标注框介绍
  • JAiRouter 架构揭秘:一个面向 AI 时代的响应式网关设计
  • JUC读写锁
  • 宁波市第八届网络安全大赛初赛(REVERSE-Writeup)
  • 基于Spring Boot+Vue的社区便民服务平台 智慧社区平台 志愿者服务管理
  • day25|学习前端js
  • Product Hunt 每日热榜 | 2025-08-18
  • 【yocto】为什么要选择yocto?
  • 亚马逊新手突围:从流量破冰到持续出单