POSIX:可移植性操作系统接口,是一种关于信息技术的IEEE 标准
:包括 系统应用程序接口(简称 API),实时扩展[C 语言]
目的:定义了标准的基于 UNIX 操作系统的系统接口 ,环境来支持源代码级的可移植性
语言规范:
访问核心服务的编程语言的标准接口
一个特殊语言服务的标准接口
该标准:
陈述的范围和一系列标准参考,定义和总概念,各种接口设备,数据交换格式
该标准的目的:
面向应用
定义接口,而不是它的具体实现
涉及资源和可移植性,而非对象
基于 c 语言
无超级用户,无系统管理
最小限度的接口,最小限度的定义
应用领域广泛
对以前的实现进行最小限度改变
对原有程序代码做最小的修改
实时扩展
概述
定义范围的关键要素:
定义足够的一套功能适用于实时应用程序领域的重要部分
定义足够的实现规范和性能相关的函数,以便允许实时应用程序完成系统的确定性的响应
一致性:
系统须支持标准中定义的接口,系统能够提供标准中没有要求到的函数和工具
所有遵循标准的应用程序都使用基于 c 语言的服务
术语和基本需求
定义:
术语:
一致性文档,被定义的实现,可能性,无用的特性
通用名词:绝对路径,存取模式,地址空间,适当权限,定时器,异步 I/O 操作,后台进程,后台进程组,块文件,阻塞进程
基本概念:
扩展安全控制;文件存取允许;文件级别;文件名可移植性;路径名的决定;
错误号:
大部分函数都在外部变量 errno 中提供了错误号
extern int errno;
简单系统的数据类型:
// /usr/include/x86_64-linux-gnu/sys
#include <sys/types.h>
//设备号
#ifndef __dev_t_defined
typedef __dev_t dev_t;
# define __dev_t_defined
#endif
//进程标识符
#ifndef __gid_t_defined
typedef __gid_t gid_t;
# define __gid_t_defined
#endif
//文件序列号
#ifndef __ino_t_defined
# ifndef __USE_FILE_OFFSET64
typedef __ino_t ino_t;
# else
typedef __ino64_t ino_t;
# endif
# define __ino_t_defined
#endif
//连接内容
#ifndef __nlink_t_defined
typedef __nlink_t nlink_t;
# define __nlink_t_defined
#endif
//文件大小
#ifndef __off_t_defined
# ifndef __USE_FILE_OFFSET64
typedef __off_t off_t;
# else
typedef __off64_t off_t;
# endif
# define __off_t_defined
#endif
#if defined __USE_LARGEFILE64 && !defined __off64_t_defined
typedef __off64_t off64_t;
# define __off64_t_defined
#endif
//进程或进程组标志符
#ifndef __pid_t_defined
typedef __pid_t pid_t;
# define __pid_t_defined
#endif
//返回字节数和错误标志的函数
#ifndef __ssize_t_defined
typedef __ssize_t ssize_t;
# define __ssize_t_defined
#endif
//用户标志符
#ifndef __uid_t_defined
typedef __uid_t uid_t;
# define __uid_t_defined
#endif
环境描述:
当一个进程开始执行时,将调用一个表示环境的字符串数组
extern char **environ;
进程原语
进程的创建和执行
进程创建
#include <sys/types.h>
//创建一个新的进程
pid_t fork(void);
执行一个文件
/*
* 用一个新的进程映像替代了当前的进程映像
* 新进程映像文件: 新的进程映像创建于一个规则的,可执行文件
* 成功无返回值
* 因为调用进程映像,被新的进程映像 覆盖
*/
int execl(const char *path, const char *arg, ...);
int execv(const char *path, const *char argv[]);
int execle(const char *path, const char *arg, ...);
int execve(const char *path, const *char argv[], char *const envp[]);
int execlp(const char *file, const char *arg, ...);
int execvp(const char *file, char *const argv[]);
进程的终止
进程的终止:
从 main()函数返回时或者执行 exit()或_exit()函数时正常的终止
被 abort()函数请求或者接受到一些信号时不正常的终止
等待进程终止:
#include <sys/types.h>
#include <sys/wait.h>
/*
*调用进程获得它的一个子进程的状态信息
*Wait: 将挂起调用进程直到获得了它的子进程的状态信息 或直到获得一个终止进程信号
*pid=- 1 并options = 0,wait 与 waitpid功能相同
* 否则功能由 pid 和 options 的值而改变
*/
pid_t wait(int *stat_loc);
pid_t waitpid(pid_t pid, int *stat_loc, int options);
终止一个进程
//终止一个调用进程,不返回
void _exit(int status);