1、POSIX原则理解 POSIX原则总体分析 POSIX,全称为可移植性操作系统接口,是一种关于信息技术IEEE原则。它涉及了系统应用程序接口(简称API),以及实时扩展[C语言]。 该原则目是定义了原则基于UNIX操作系统系统接口和环境来支持源代码级可移植性。当前,原则重要提供了依赖C语言一系列原则服务,再将来版本中,原则将致力于提供基于不同语言规范。 该原则对核心需求某些定义了一系列任何编程语言都通用服务,这一某些服务重要从其功能需求方面阐述,而非定义依赖于编程语言接口。语言规范重要有两某些构成。一某些涉及了访问核心服务编程语言原则接口,这些核心服务为原则中基于编程语言核心需求
2、某些所定义;另一某些包括了一种特殊语言服务原则接口。基于任何语言,与该原则一致执行都必要遵循语言规范任何章节。 该原则一共被分为四个某些: (1)陈述范畴和一系列原则参照(第一章); (2)定义和总概念;(第二章) (3)各种接口设备;(第三章到第九章,第十一章到第十五章) (4)数据互换格式;(第十章) 该原则重要目有: (1)面向应用 (2)定义接口,而不是它详细实现; (3)涉及资源和可移植性,而非对象; (4)基于c语言; (5)无超级顾客,无系统管理; (6)最小限度接口,最小限度定义; (7)应用领域广泛; (8)对此前实现进行最小限度变化; (9)对
3、原有程序代码做最小修改;
(10)实时扩展;
如下就对各个章节做简要分析。
第一章概述
1.1范畴
定义范畴核心要素有:
(1)定义足够一套功能合用于实时应用程序领域重要某些;
(2)定义足够实现规范和性能有关函数,以便容许实时应用程序完毕系统拟定性响应;
1.2 一致性
系统须支持原则中定义接口,系统可以提供原则中没有规定到函数和工具。在遵循于该原则实现中,一种一致性文档是需要用到,它必要具备与该原则相似构造,包具有全名,数字,和原则所批示日期,以及头文献
4、致性,所有遵循原则应用程序都使用基于c语言服务。
第二章术语和基本需求
2.1 定义
(1)术语
该原则中定义了一系列术语,如一致性文档,被定义实现,也许性,无用特性等,还定义了某些通用名词,如绝对途径,存取模式,地址空间,恰当权限,定期器,异步I/O操作,后台进程,后台进程组,块文献,阻塞进程,等等。
(2)基本概念
扩展安全控制;文献存取容许;文献级别;文献名可移植性;途径名决定;
(3)错误号
大某些函数都在外部变量errno中提供了错误号,定义如下:
extern int errno;
(4)简朴系统数据类型
这些数据类型在头文献
5、定义,它包括了至少如下类型: dev_t: 用于设备号; gid_t: 用于进程标志符; ino_t: 用于文献序列号; inode_t: 用于某些文献参数; nlink_t: 用于连接内容; off_t: 用于文献大小; pid_t: 用于进程或进程组标志符; size_t: 在c原则(2)中定义; ssize_t: 用于返回字节数和错误标志函数; uid_t: 用于顾客标志符; (5)环境描述 当一种进程开始执行时,将调用一种表达环境字符串数组,这个数组为外部变量environ所指向,其定义如下: extern char **
6、environ; (6)其她 在该章中,原则还总体简介了c语言定义某些标志符,数字方面限制,以及某些符号常量,这些在后来章节中都会一一浮现。 如下是OSE服务简要设计描述一种清单。这些规定详细论述在POSIX规范书中。 l 进程源语 进程源语所涉及函数完毕了大多数简朴操作系统服务,如进程解决,进程信号,以及定期器。普通状况下,该原则所拟定进程所有属性都不能被一种进程源语变化,除非描述符特别指明。 l 进程环境 l 目录与文献 目录与文献所涉及函数执行了一系列操作系统服务,例如文献创立和删除,检测,修改特性。它们提供了重要办法,进程由于一系列 I/O操作使用她们来存取文献和
7、目录。 l 输入输出原语 这些子文献和管道函数解决输入和输出。功能被指定为进行文献描述符管理和I/O活动之间得平衡调节。 l 设备驱动和分类函数 该章节描述了一种基本终端接口和某些基本终端控制函数,如果执行时被提供,所有异步通信端口都应当支持它,接口是支持网络连接还是异步端口或者两者都支持由完毕者定义,一致性文档应当描述那些设备类型被这些接口所支持。本章某些函数重要应用与进程控制终端 l 基于c语言得服务 l 系统数据库 l 数据互换格式 l 异步 l 内存管理 l 执行调度 l 时钟和定期器 l 消息传递 第三章进程原语
8、
3.1 进程创立和执行
1.进程创立
函数原型:pid_t fork (void)
函数功能:调用时需要引用头文献是
9、ar *path,const *char argv[],char *const envp[]) int execlp(const char *file,const char *arg. …); int execvp(const char *file,char *const argv[]); 函数功能:exec系列函数用一种新进程映像代替了当迈进 程映像,这个新进程映像创立于一种规则,可执行文献,叫做新进程映像文献。执行成功无返回值由于调用进程映像觉得新进程映像所覆盖。 3.2 进程终结 进程终结有两种状况: (1)从main()函数返回时或者执行exit()或
10、exit()函数时正常终结;
(2)被abort()函数祈求或者接受到某些信号时不正常终结;
1.等待进程终结
函数原型:#include
11、waitpid()函数功能将和waitpid()相似,否则它功能将根据pid和options值而变化。
2. 终结一种进程
函数原型:void_exit(int status);
函数功能:_exit()函数将终结一种调用进程,该函数不能返回给其调用者
3.3 信号
在头文献
12、UP 为控制中断所检测到挂断 SIGILL 无效硬件信号检测 SIGINT 交互式信号 SIGKILL 终结信号 SIGPIPE 写信号 SIGQUIT 交互式终结信号 SIGSEGV 无效内存引用检测信号 SIGTERM 终结信号 SIGUSR1 保存信号 SIGUSR2 保存信号 作业控制信号 符号常量 描述 SIGCHLD 子进程终结或停止 SIGCONT 停止后继续 SIGSTOP 停止信号 SIGTSTP 交互式停止信号 SIGTTIN 从控制终端读 SIGTTOU 写到控制终端 内存保护信号 符号常量 描述
13、
SIGBUS
获取内存中不拟定某些
每一种进程有一种进程标记(process mask),它定义了一组产生但被阻塞传递信号集。Sigaction(),sigpromask(),sigsuspend()
函数控制这个进程标记行为。
1.送一种信号到进程
函数原型:#include
14、纵信号集
函数原型:#include
15、更改信号行为
函数原型:#include
16、de
17、t_t *set);
函数功能:该函数存储一种信号集,这些信号是在被调用进程传播和未定状况下阻塞,由参数set所指向。
6.等待一种信号
函数原型:#include
18、const sigset_t *set,siginfo_t *info);
int sigtimedwait(const sigset_t *set,siginfo_ *info,const struct timespec *timeout );
函数功能:该函数从参数set所拟定信号集中选取一种未定信号出来。如果该函数成功,返回一种信号数;否则返回-1。
8. 排队一种信号到进程
函数原型:#include
19、数功能:该函数功能是使由signo拟定信号将参数value所拟定值发送到由pid指明进程中去。 3.4 定期器操作 1.调度警报 函数原型:unsigned int alarm(unsigned int seconds); 函数功能:当参数seconds指定一段实时时间过去后,该函数将发送一种SIGALRM信号到调用进程。 2. 挂起进程执行 函数原型:int pause(void); 函数功能:该函数挂起一种调用进程直到得到一种信号,这个信号或者执行信号跟踪功能或者是终结该进程。如果是终结进程,该函数不返回;如果是执行信号跟踪功能,则该函数在信号跟踪函数
20、返回后也要返回。
3. 延迟进程执行
函数原型:unsigned int sleep(unsigned int seconds);
函数功能:该函数使当迈进程从执行状态转化为挂起状态,直到参数seconds所指定一段实时时间过去后,或者是一种唤醒信号跟踪功能或终结进程功能信号到来。该挂起时间由于系统其她调度活动也许会比规定期间长。
第四章进程环境
4.1 进程标志符
1.获得进程和父进程ID
函数原型:#include
21、进程进程ID,
getppid()返回调用进程父进程ID.
4.2 顾客ID
1.获得真实顾客,有效顾客,真是组,有效组ID
函数原型:#include
22、clude
23、 *getlogin(void)
函数功能:该函数返回一种指针,指向与调用进程有关顾客名。
4.3 进程组
1.获得进程组ID
函数原型:#include
24、
3. 为作业控制设立进程组ID
函数原型:#include
25、 time_t time(time_t *tloc);
函数功能:该函数返回自从一时间点以来某个时间值,以秒为单位。参数tloc指向一种时间值所存储地方。
2. 获得进程时间
函数原型:#include
26、me);
函数功能:该函数在环境列表查找字符串name=value,返回指向value指针。如果没有找到,则返回null。
4.7 终端标志
1.产生终端途径
函数原型:#include
27、s有关终端名;如果fildes是一种有效与终端联系文献描述符,isatty()返回“1”,否则返回“0”。
4.8 可配备系统变量
1.获得可配备系统变量
函数原型:#include
28、
2.目录操作
函数原型:#include
29、闭目录流,如成功,则返回“0”值。
5.2 工作目录
1 变化当前工作目录
函数原型:int chdir(const char *path);
函数功能:path指向目录途径名。该函数使命名录录成为当前工作目录。
2 获得工作目录途径名
函数原型:char *getcwd(char *buf,size_t size);
函数功能:该函数复制当前工作目录绝对途径名到buf所指向队列中。
5.3 基本文献创立
1 打开一种文献
函数原型:#include 30、t.h>
#include 31、ath,mode_t mode);
函数功能:该函数调用creat(path,mode)相称于open(path,o_wronly/o_creat/o_trunc,mode);
3 设立文献创立标记
函数原型:#include 32、isting,const char *new);
函数功能:参数existing指向途径名来命名存在文献,参数new指向一种途径名,它命名了一种创立新目录入口。该函数为已存在文献自动创立一种新连接,并且将文献连接数加1。
5.4 特殊文献创立
1 生成一种目录
函数原型:#include 33、 2 创立一种FIFO类型文献
函数原型:#include 34、原型:int rmdir(const char *path)
函数功能:
3 重命名一种文献
函数原型:int rename(const char *old,const char *new);
函数功能:该函数变化一种文献名字,参数old指向被重命名文献途径名,参数new指向文献新途径名。
5.6 文献特性
5.7 可配备途径名变量
第六章输入与输出源语
6.1 管道
1 创立内进程通道
函数原型:int pipe(int filedw[2]);
函数功能:该函数创立一种管道并且创立两个文献描述符,一种是fildes[0 35、],一种是fildes[1],它们分别指是‘读’与‘写’管道端。
6.2 文献描述符控制
1 复制一种打开文献描述符
函数原型:int dup(int fildes);
int dup2(int fileds,int fileds2);
函数功能:这两个函数为fcntl()服务提供了两个选取接口,用到了F_DUPFD命令。
6.3 撤除文献描述符
1 关闭一种文献
函数原型:int close (int fildes);
函数功能
6.4 输入和输出
1 文献读
函数原型:ssize_t read 36、int fildes,void *buf,size_t nbyte);
函数功能:
2 文献写
函数原型:ssize_t write(int fildes,const void *buf,size_t nbyte);
函数功能:
6.5 一种文献控制操作
1 文献控制操作数据定义
头文献 37、
F_SETLK
F_SETLKW
2 文献控制
函数原型:#clude 38、>
off_t lseek(int fildes,off_t offset,int whence);
函数功能:lseek()为fildes所指定文献重新设立偏移量。
6.6 文献同步
1 文献状态同步
函数原型:#include 39、前所有排队I/O操作进入同步 I/O状态。
6.7 异步输入与输出
1 ●异步输入与输出数据定义
头文献 40、s,表达读文献;aiocbp->aio_buf,表达读到缓冲区。
3 异步写
函数原型:#include 41、函数原型:#include 42、s是文献描述符,参数aiocbp指向异步I/O控制块上祈求删除某些。
8 等待异步I/O祈求
函数原型:#include 43、t op,struct aiocb *aiocbp);
函数功能:该函数迫使所有与(参数aiocbp指向)构造aiocb中aio_fildes所指定文献有关异步I/O操作进入同步状态。
第七章设备和面向类函数
7.1 基本终端接口
1 接口特性
●当一种终端文献被打开,普通它将引起进程等待直到连接被建立。
●进程组
一种终端可以具备与它有关前台进程组,它发挥特定角色,背面会讲到。
●控制终端
●终端存取控制
●输入操作和读进程
●规范输入操作
●非规范模式输入操作
●写数据和输出解决
●特殊符号(INTR,QUIT,ERASE,KILL…)
44、●modem断掉连接
●关闭终端设备文献
2 可设立参数
●termios机构
该构造在 45、
ISTRIP
Strip字符
IXOFF
开始/停止输入控制使能
IXON
开始/停止输出控制使能
PARMRK
产生奇偶错误
●输出模式
●控制模式
标记名
描述
CLOCAL
忽视modem状态行
CREAD
接受使能
CSIZE
每个字节位数
CS5
5位
CS6
6位
CS7
7位
CS8
8位
CSTOPB
46、 发送一种或两个停止位
HUPCL
在最后关闭中挂起
PARENB
奇校验使能
PARODD
奇校验或偶校验
●本地模式
termios c_lflag 值
标记名
描述
ECHO
响应使能
ECHOE
响应ETASE
ECHOK
响应KILL
ECHONL
响应’/n’
ICANON
规范输入
IEXTEN
扩展函数使能
ISIG
信号使能
NOFLSH
中断,停止或挂起后关掉flush
TOSTOP
为后台输出发送SIGTTOU
●特殊控制字符
这些特殊控制字符值在队列c_cc中定义,分为规范和非 47、规范两种模式。
●波特率值
3 波特率函数
函数原型:#include 48、mios构造获得和设定输入与输出波特率值。
7.2 基本终端接口控制函数
1 获得并设定状态
函数原型:#include 49、数原型:#include 50、出有关解决。(参照第212页)
3获得前台进程组ID
函数原型:#include






