POSIX表示可移植操作系统接口(Portable Operating System Interface of UNIX,缩写为 POSIX ),POSIX标准定义了操作系统应该为应用程序提供的接口标准。
简单地说:完成同一功能,不同内核提供的系统调用(也就是一个函数)是不同的,例如创建进程,linux下是fork函数,windows下是creatprocess函数。好,我现在在linux下写一个程序,用到fork函数,那么这个程序该怎么往windows上移植?我需要把源代码里的fork通通改成creatprocess,然后重新编译!
posix标准的出现就是为了解决这个问题。linux和windows都要实现基本的posix标准,linux把fork函数封装成posix_fork(随便说的),windows把creatprocess函数也封装成posix_fork,都声明在unistd.h里。
这样,程序员编写普通应用时候,只用包含unistd.h,调用posix_fork函数,程序就在源代码级别可移植了。
附:POSIX标准定义的必须的头文件(26项)
头文件 | 说明 | 头文件 | 说明 |
---|---|---|---|
<dirent.h> | 目录项 | <fcntl.h> | 文件控制 |
<fnmatch.h> | 文件名匹配类型 | <glob.h> | 路径名模式匹配类型 |
<grp.h> | 组文件 | <netdb.h> | 网络数据库操作 |
<pwd.h> | 口令文件 | <regex.h> | 正则表达式 |
<tar.h> | tar归档值 | <termios.h> | 终端I/O |
<unistd.h> | 符号常量 | <utime.h> | 文件时间 |
<wordexp.h> | 字扩展类型 | <arpa/inet.h> | Internet定义 |
<net/if…h> | 套接字本地接口 | <netinet/in.h> | Internet地址族 |
<netinet/tcp.h> | 传输控制协议定义 | <sys/mman.h> | 内存管理声明 |
<sys/select.h> | select函数 | <sys/socket.h> | 套接字接口 |
<sys/stat.h> | 文件状态 | <sys/times.h> | 进程时间 |
<sys/types.h> | 基本系统数据类型 | <sys/un.h> | UNIX域套接字定义 |
<sys/utsname.h> | 系统名 | <sys/wait.h> | 进程控制 |
POSIX标准定义的XSI扩展头文件(26项)
头文件 | 说明 | 头文件 | 说明 |
---|---|---|---|
<cpio.h> | cpio归档值 | <dlfcn.h> | 动态链接 |
<fmtmsg.h> | 消息显示结构 | <ftw.h> | 文件树漫游 |
<iconv.h> | 代码集转换实用程序 | <langinfo.h> | 语言信息常量 |
<libgen.h> | 模式匹配函数定义 | <monetary.h> | 货币类型 |
<ndbm.h> | 数据库操作 | <nl_types.h> | 消息类别 |
<poll.h> | 轮询函数 | <search.h> | 搜索表 |
<strings.h> | 字符串操作 | <syslog.h> | 系统出错日志记录 |
<ucontext.h> | 用户上下文 | <ulimit.h> | 用户限制 |
<utmpx.h> | 用户帐户数据库 | <sys/ipc.h> | IPC |
<sys/msg.h> | 消息队列 | <sys/resource.h> | 资源操作 |
<sys/sem.h> | 信号量 | <sys/shm.h> | 共享存储 |
<sys/statvfs.h> | 文件系统信息 | <sys/time.h> | 时间类型 |
<sys/timeb.h> | 附加的日期和时间定义 | <sys/uio.h> | 矢量I/O操作 |
POSIX标准定义的可选头文件(8项)
头文件 | 说明 | 头文件 | 说明 |
---|---|---|---|
<aio.h> | 异步I/O | <mqueue.h> | 消息队列 |
<pthread.h> | 线程 | <sched.h> | 执行调度 |
<semaphore.h> | 信号量 | <spawn.h> | 实时spawn接口 |
<stropts.h> | XSI STREAMS接口 | <trace.h> | 时间跟踪 |