什么是POSIX
POSIX(Portable Operating System Interface,可移植操作系统接口)是一个标准,它定义了操作系统接口的一系列规范。POSIX标准最初由IEEE制定,现在由Open Group维护。
POSIX标准的主要目的是为了保证不同操作系统之间的兼容性,使得开发者能够编写可移植的应用程序,而不必担心不同操作系统之间的差异。POSIX标准定义了许多系统调用、库函数和命令行工具,这些都是操作系统提供给应用程序的接口。
POSIX标准包括许多部分,如POSIX.1、POSIX.2、POSIX.4等等。其中,POSIX.1定义了基本的系统调用和库函数,如文件操作、进程管理、信号处理等等。POSIX.2定义了一些额外的命令行工具和库函数,如awk、sed、grep等等。POSIX.4则定义了一些高级功能,如实时操作系统、多线程支持、网络编程等等。
POSIX标准的另一个重要特点是它的可扩展性。如果操作系统提供了额外的功能,可以通过扩展POSIX标准来支持这些功能。这使得POSIX标准能够跟上操作系统的发展,保持其在可移植性方面的优势。
linux下的POSIX
在Linux下,POSIX规范主要包括以下内容:
-
Shell和工具:包括sh、awk、sed、grep等常用工具以及shell脚本语言。
-
系统调用:包括文件I/O、进程管理、信号处理、网络通信、时间管理等。
-
库函数:包括C标准库、数学库、字符串库、网络库等。
-
头文件:包括标准头文件、网络头文件、系统调用头文件等。
-
环境变量和命令行参数:包括PATH、HOME、USER、SHELL等常用环境变量以及命令行参数的解析规则。
-
进程间通信:包括管道、信号、共享内存、消息队列等。
-
线程和同步:包括线程创建、同步原语、互斥锁、条件变量等。
-
文件系统:包括文件和目录操作、文件权限、文件系统接口等。
POSIX常用api
在Linux系统中,POSIX提供了许多函数,包括:
- 文件操作函数
- access():检查文件是否存在并有权限
- chdir():改变当前工作目录
- chmod():修改文件权限
- chown():修改文件所有者和组
- creat():创建文件
- dup():复制文件描述符
- dup2():复制文件描述符并指定新的文件描述符
- fchown():修改文件所有者和组
- fcntl():对文件描述符进行控制操作
- flock():对文件进行加锁和解锁操作
- ftruncate():截断文件
- getcwd():获取当前工作目录
- link():创建文件硬链接
- lstat():获取符号链接的信息
- mkdir():创建目录
- mkfifo():创建命名管道
- mknod():创建设备文件
- open():打开文件
- opendir():打开目录
- read():读取文件
- readdir():读取目录
- readlink():读取符号链接
- rename():重命名文件或目录
- rmdir():删除目录
- stat():获取文件状态信息
- symlink():创建符号链接
- truncate():截断文件
- unlink():删除文件或符号链接
- utime():修改文件访问和修改时间
- write():写入文件
- 进程控制函数
- _exit():退出进程
- abort():异常退出进程
- alarm():设置定时器
- atexit():注册进程退出时的函数
- chroot():改变根目录
- exec():执行命令
- fork():创建子进程
- getpid():获取当前进程ID
- getppid():获取当前进程的父进程ID
- getpgid():获取进程组ID
- getpgrp():获取进程组ID
- getpriority():获取进程优先级
- kill():向进程发送信号
- nice():修改进程优先级
- pause():挂起进程
- pipe():创建管道
- setpgid():设置进程组ID
- setsid():创建新会话
- sleep():休眠进程
- tcgetpgrp():获取前台进程组ID
- tcsetpgrp():设置前台进程组ID
- wait():等待子进程结束
- waitpid():等待指定子进程结束
- 信号处理函数
- raise():向当前进程发送信号
- sigaction():安装信号处理器
- sigaddset():将信号添加到信号集中
- sigdelset():将信号从信号集中删除
- sigemptyset():清空信号集
- sigfillset():将所有信号添加到信号集中
- sigismember():判断信号是否在信号集中
- signal():设置信号处理函数
- sigpending():获取未处理的信号集
- sigprocmask():设置或获取信号屏蔽字
- sigsuspend():挂起进程,等待信号
- 线程控制函数
- pthread_attr_destroy():销毁线程属性对象
- pthread_attr_init():初始化线程属性对象
- pthread_attr_getdetachstate():获取线程分离状态
- pthread_attr_setdetachstate():设置线程分离状态
- pthread_create():创建线程
- pthread_detach():将线程设置为分离状态
- pthread_equal():判断两个线程ID是否相等
- pthread_exit():退出线程
- pthread_join():等待线程结束
- pthread_mutex_destroy():销毁互斥锁
- pthread_mutex_init():初始化互斥锁
- pthread_mutex_lock():加锁
- pthread_mutex_trylock():尝试加锁
- pthread_mutex_unlock():解锁
- pthread_self():获取当前线程ID
- 时间和日期函数
- asctime():将时间转换为字符串
- clock():获取进程CPU时间
- ctime():将时间转换为字符串
- difftime():计算两个时间之间的差值
- gmtime():将时间转换为UTC时间
- localtime():将时间转换为本地时间
- mktime():将时间转换为秒数
- strftime():格式化时间输出
- time():获取当前时间
- gettimeofday():获取当前时间和时区
以上是大部分常用的API,POSIX函数的文档可以在IEEE Std 1003.1标准中找到,该标准定义了Unix和类Unix操作系统的API,许多Unix操作系统提供了man手册,可以在终端中使用man命令来查看POSIX函数的文档。
【最后一个bug】多平台都有更新和发布,大家可以一键三连,关注+星标,不错过精彩内容~