POSIX标准理解.docx
- 文档编号:3828696
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:36
- 大小:34.47KB
POSIX标准理解.docx
《POSIX标准理解.docx》由会员分享,可在线阅读,更多相关《POSIX标准理解.docx(36页珍藏版)》请在冰豆网上搜索。
POSIX标准理解
POSIX标准理解
POSIX标准总体分析
POSIX,全称为可移植性操作系统接口,是一种关于信息技术的IEEE标准。
它包括了系统应用程序接口(简称API),以与实时扩展[C语言]。
该标准的目的是定义了标准的基于UNIX操作系统的系统接口和环境来支持源代码级的可移植性。
现在,标准主要提供了依赖C语言的一系列标准服务,再将来的版本中,标准将致力于提供基于不同语言的规范。
该标准对核心需求部分定义了一系列任何编程语言都通用的服务,这一部分服务主要从其功能需求方面阐述,而非定义依赖于编程语言的接口。
语言规范主要有两部分组成。
一部分包括了访问核心服务的编程语言的标准接口,这些核心服务为标准中基于编程语言的核心需求部分所定义;另一部分包含了一个特殊语言服务的标准接口。
基于任何语言,与该标准一致的执行都必须遵循语言规范的任何章节。
该标准一共被分为四个部分:
(1)陈述的范围和一系列标准参考(第一章);
(2)定义和总概念;(第二章)
(3)各种接口设备;(第三章到第九章,第十一章到第十五章)
(4)数据交换格式;(第十章)
该标准的主要目的有:
(1)面向应用
(2)定义接口,而不是它的具体实现;
(3)涉与资源和可移植性,而非对象;
(4)基于c语言;
(5)无超级用户,无系统管理;
(6)最小限度的接口,最小限度的定义;
(7)应用领域广泛;
(8)对以前的实现进行最小限度改变;
(9)对原有程序代码做最小的修改;
(10)实时扩展;
以下就对各个章节做简要分析。
第一章概述
1.1范围
定义范围的关键要素有:
(1)定义足够的一套功能适用于实时应用程序领域的重要部分;
(2)定义足够的实现规范和性能相关的函数,以便允许实时应用程序完成系统的确定性的响应;
1.2 一致性
系统须支持标准中定义的接口,系统能够提供标准中没有要求到的函数和工具。
在遵循于该标准的实现中,一种一致性文档是需要用到的,它必须具有与该标准相同的结构,包含有全名,数字,和标准所指示的日期,以与头文件
该一致性文档详细说明了标准中定义的执行行为。
该标准要求了应用程序的一致性,所有遵循标准的应用程序都使用基于c语言的服务。
第二章术语和基本需求
2.1 定义
(1)术语
该标准中定义了一系列术语,如一致性文档,被定义的实现,可能性,无用的特性等,还定义了一些通用名词,如绝对路径,存取模式,地址空间,适当权限,定时器,异步I/O操作,后台进程,后台进程组,块文件,阻塞进程,等等。
(2)基本概念
扩展安全控制;文件存取允许;文件级别;文件名可移植性;路径名的决定;
(3)错误号
大部分函数都在外部变量errno中提供了错误号,定义如下:
externinterrno;
(4)简单系统的数据类型
这些数据类型在头文件
dev_t:
用于设备号;
gid_t:
用于进程标志符;
ino_t:
用于文件序列号;
inode_t:
用于一些文件参数;
nlink_t:
用于连接内容;
off_t:
用于文件大小;
pid_t:
用于进程或进程组标志符;
size_t:
在c标准
(2)中定义;
ssize_t:
用于返回字节数和错误标志的函数;
uid_t:
用于用户标志符;
(5)环境描述
当一个进程开始执行时,将调用一个表示环境的字符串数组,这个数组为外部变量environ所指向,其定义如下:
externchar**environ;
(6)其他
在该章中,标准还总体介绍了c语言定义的一些标志符,数字方面的限制,以与一些符号常量,这些在以后的章节中都会一一出现。
以下是OSE服务的简要设计描述的一个清单。
这些要求详细叙述在POSIX规范书中。
●进程源语
进程源语所涉与的函数完成了大多数简单的操作系统服务,如进程处理,进程信号,以与定时器。
一般情况下,该标准所确定的进程的所有属性都不能被一个进程源语改变,除非描述符特别指明。
●进程环境
●目录与文件
目录与文件所涉与的函数执行了一系列操作系统服务,例如文件的创建和删除,检测,修改特性。
它们提供了主要的方法,进程因为一系列 I/O操作使用他们来存取文件和目录。
●输入输出原语
这些子文件和管道函数处理输入和输出。
功能被指定为进行文件描述符管理和I/O活动之间得平衡调节。
●设备驱动和分类函数
该章节描述了一个基本的终端接口和一些基本的终端控制函数,如果执行时被提供,所有的异步通信端口都应该支持它,接口是支持网络连接还是异步端口或者两者都支持由完成者定义,一致性文档应该描述那些设备类型被这些接口所支持。
本章的一些函数主要应用与进程的控制终端
●基于c语言得服务
●系统数据库
●数据交换格式
●异步
●内存管理
●执行调度
●时钟和定时器
●消息传递
第三章进程原语
3.1 进程的创建和执行
1.进程创建
函数原型:
pid_t fork(void)
函数功能:
调用时需要引用的头文件是
2.执行一个文件
函数原型:
intexec1(constchar*path,constchar*arg,…);
intexecv(constchar*path,const*charargv[]);
intexecle(constchar*path,constchar*arg,…);
intexecve(constchar*path,const*charargv[],char*constenvp[])
intexeclp(constchar*file,constchar*arg.…);
intexecvp(constchar*file,char*constargv[]);
函数功能:
exec系列的函数用一个新的进程映像替代了当前的进
程映像,这个新的进程映像创建于一个规则的,可执行文件,叫做新进程映像文件。
执行成功无返回值因为调用进程映像以为新的进程映像所覆盖。
3.2 进程的终止
进程的终止有两种情况:
(1)从main()函数返回时或者执行exit()或_exit()函数时正常的终止;
(2)被abort()函数请求或者接受到一些信号时不正常的终止;
1.等待进程终止
函数原型:
#include
#include
pid_twait(int*stat_loc);
pid_twaitpid(pid_tpid,int*stat_loc.intoptions);
函数功能:
wait()和waitpid()允许调用进程获得它的一个子进程的状态信息。
Wait()函数将挂起调用进程直到获得了它的子进程的状态信息,或者是直到获得一个终止进程信号;如果pid=-1并且options=0,waitpid()函数功能将和waitpid()相同,否则它的功能将依据pid和options的值而改变。
2. 终止一个进程
函数原型:
void_exit(intstatus);
函数功能:
_exit()函数将终止一个调用进程,该函数不能返回给其调用者
3.3 信号
在头文件
完成所定义的信号分三类:
必需的信号;任务控制信号;内存保护信号,分别如下表:
必需信号
符号常量
描述
SIGABRT
非正常终止信号
SIGALRM
超时信号
SIGFPE
错误运算操作
SIGHUP
为控制中断所检测到的挂断
SIGILL
无效硬件信号的检测
SIGINT
交互式信号
SIGKILL
终止信号
SIGPIPE
写信号
SIGQUIT
交互式终止信号
SIGSEGV
无效内存引用检测信号
SIGTERM
终止信号
SIGUSR1
保留信号
SIGUSR2
保留信号
作业控制信号
符号常量
描述
SIGCHLD
子进程终止或停止
SIGCONT
停止后继续
SIGSTOP
停止信号
SIGTSTP
交互式的停止信号
SIGTTIN
从控制终端读
SIGTTOU
写到控制终端
内存保护信号
符号常量
描述
SIGBUS
获取内存中不确定的部分
每一个进程有一个进程标记(processmask),它定义了一组产生但被阻塞传递的信号集。
Sigaction(),sigpromask(),sigsuspend()
函数控制这个进程标记的行为。
1.送一个信号到进程
函数原型:
#include
#include
intkill(pid_tpid,intsig)
函数功能:
该函数发送一个信号到一个由pid指明的进程或者进程组,sig标志了信号类型,其值是0或者上表中的值。
如果发送成功,返回‘0’,否则返回‘1’。
2. 操纵信号集
函数原型:
#include
intsigemptyset(sigset_t*set);
intsigfillset(sigset_t*set);
intsigaddset(sigset_t*set,intsigno);
intsigdelset(sigset_t*set,intsigno);
intsigisemeber(constsigset_t*set,intsigno);
函数功能:
sigsetops源语操纵信号集。
他们操作以数字为对象,这些数据由应用程序的地址所指向,而不是以系统所知的信号集为对象。
3. 检测和更改信号的行为
函数原型:
#include
intsigaction(intsig,conststructsigaction*act,structsigaction*oact);
函数功能:
该函数允许调用函数检查与确定的信号相联系的行为,
参数sig确定了信号,sigaction结构在头文件
如果参数act不为null,它指向一个结构,它指定了与信号相联系的行为。
如果参数oact不为null,先前与信号相联系的行为将被存储到由oact指向的地方。
4. 检查和改变阻塞信号
函数原型:
#include
intsigprocmask(inthow,xonstsigset_t*set,sigset_t*oset);
函数功能:
该函数用来检查和改变调用进程的信号标记(signalmask),如果参数set不为null,它指向一个信号集的用于改变当前的阻塞集。
参数how指明了改变方式,参数oset不为null时,先前的信号标记被存储在它所指向的地方,如果参数set为null,则参数how就没有意义了,而且进程的信号标记不能随函数调用而改变。
5. 检查未定的信号
函数原型:
#include
intsigpending(sigset_t*set);
函数功能:
该函数存储一个信号集,这些信号是在被调用进程传输和未定的情况下阻塞的,由参数set所指向。
6.等待一个信号
函数原型:
#include
intsigsuspend(constsigset_t*sigmask);
函数功能:
该函数用参数sigmask所指向的信号集取代了进程信号标记(signalmask),然后挂起该进程直到接受到一个信号,其行为是执行信号跟踪功能或者是终止该进程。
7. 同步接受一个信号
函数原型:
#include
intsigwaitinfo(constsigset_t*set,siginfo_t*info);
intsigtimedwait(constsigset_t*set,siginfo_*info,conststructtimespec*timeout);
函数功能:
该函数从参数set所确定的信号集中选择一个未定的信号出来。
如果该函数成功,返回一个信号数;否则返回-1。
8. 排队一个信号到进程
函数原型:
#include
intsigqueue(pid_tpid,intsigno,constunionsigvalvalue);
函数功能:
该函数功能是使由signo确定的信号将参数value所确定的值发送到由pid指明的进程中去。
3.4 定时器操作
1.调度警报
函数原型:
unsignedintalarm(unsignedintseconds);
函数功能:
当参数seconds指定的一段实时时间过去后,该函数将发送一个SIGALRM信号到调用进程。
2. 挂起进程的执行
函数原型:
intpause(void);
函数功能:
该函数挂起一个调用进程直到得到一个信号,这个信号或者执行信号跟踪功能或者是终止该进程。
如果是终止进程,该函数不返回;如果是执行信号跟踪功能,则该函数在信号跟踪函数返回后也要返回。
3. 延迟进程的执行
函数原型:
unsignedintsleep(unsignedintseconds);
函数功能:
该函数使当前进程从执行状态转化为挂起状态,直到参数seconds所指定的一段实时时间过去后,或者是一个唤醒信号跟踪功能或终止进程功能的信号到来。
该挂起时间由于系统的其他调度活动可能会比要求的时间长。
第四章进程环境
4.1 进程标志符
1.获得进程和父进程的ID
函数原型:
#include
pid_tgetpid(void);
pid_tgetppid(void);
函数功能:
getpid()返回调用进程的进程ID,
getppid()返回调用进程的父进程ID.
4.2 用户ID
1.获得真实用户,有效用户,真是组,有效组的ID
函数原型:
#include
uid_tgetuid(void);
uid_tgeteuid(void);
gid_tgetgid(void);
gid_tgetegid(void);
函数功能:
getuid()返回调用进程的真实用户ID,geteuid()返回调用进程的有效用户ID,getgid()返回调用进程的真实组ID,getegid()返回调用进程的有效组的ID。
2. 设置用户和组的ID
函数原型:
#include
intsetuid(uid_tuid);
intsetgid(gid_tgid);
函数功能:
这两个函数分别根据进程的权限设置真实用户ID,有效用户ID,真实组ID,有效组ID。
3. 获得辅助组ID
函数原型:
#include
intgetgroups(intgidsetsize.gid_tgrouplist[]);
函数功能:
该函数在队列的组列表中填入调用进程的辅助组ID。
参数grouplist确定了组列表中的元素个数。
4. 获得用户名
函数原型:
char*getlogin(void)
函数功能:
该函数返回一个指针,指向与调用进程相关的用户名。
4.3 进程组
1.获得进程组ID
函数原型:
#include
pid_tgetpgrp(void);
函数功能:
该函数返回调用进程的进程组ID。
2. 创建会议并且设置进程组ID
函数原型:
#include
pid_tsetsid(void)
函数功能:
如果调用进程不是进程组的引导者,则该函数将创建一个新的会议。
该调用进程应该为新会议的会议引导者,应该为新进程组的引导,应该没有控制终端。
进程组的ID应该等于该调用进程的ID。
3. 为作业控制设置进程组ID
函数原型:
#include
intsetpgid(pid_tpid,pid_tpgid);
函数功能:
如{_POSIX_JOB_CONTROL}被定义,则该函数用来加入已经存在的进程组或者创建一个新的进程组。
4.4 系统标志
1.获得系统名
函数原型:
#include
intuname(structutsname*name);
函数功能:
该函数存储了鉴别当前操作系统的信息。
4.5 时间
1得到系统时间
函数原型:
#include
time_ttime(time_t*tloc);
函数功能:
该函数返回自从一时间点以来的某个时间值,以秒为单位。
参数tloc指向一个时间值所存储的地方。
2. 获得进程时间
函数原型:
#include
clock_ttimes(structtime*buffer);
函数功能:
参数buffer指向一个结构,该函数向该结构填写有关时间的信息。
Clock_t和tms结构在
4.6 环境变量
1.获取环境
函数原型:
#include
char*getenv(constchar*name);
函数功能:
该函数在环境列表查找字符串name=value,返回指向value的指针。
如果没有找到,则返回null。
4.7 终端标志
1.产生终端路径
函数原型:
#include
charIctermid(char*s);
函数功能:
该函数产生一个字符串,作为路径名,提交到当前进程的当前控制终端。
2.确定终端设备名
函数原型:
char*ttyname(intfildes);
intisatty(intfildes);
函数功能:
ttyname()返回一个指针指向一个字符串,它包含了与文件描述符fildes相关的终端名;如果fildes是一个有效的与终端联系的文件描述符,isatty()返回“1”,否则返回“0”。
4.8 可配置的系统变量
1.获得可配置的系统变量
函数原型:
#include
longsysconf(intname);
函数功能:
该函数提供了一个应用方法来决定可配置系统变量的当前值。
参数name代表了所查询的系统变量。
第五章文件和目录
5.1 目录
1.目录的入口形式
头文件
Readdir()返回了一个指针指向一个类型对象structdirent。
2.目录操作
函数原型:
#include
#include
dir*opendir(constchar*dirname);
structdirent*readdir(dir*dirp);
voidrewinddir(dir*dirp);
intclosedir(dir*dirp);
函数功能:
opendir()根据参数dirname打开一个目录流;readdir()返回一个指针,它指向一个目录流中当前位置的目录入口,目录流由参数dirp指向;rewinddir()重置目录流的位置到目录的起点;closedir()关闭目录流,如成功,则返回“0”值。
5.2 工作目录
1 改变当前的工作目录
函数原型:
intchdir(constchar*path);
函数功能:
path指向目录的路径名。
该函数使命名的目录成为当前的工作目录。
2 获得工作目录路径名
函数原型:
char*getcwd(char*buf,size_tsize);
函数功能:
该函数复制当前工作目录的绝对路径名到buf所指向的队列中。
5.3 基本文件的创建
1 打开一个文件
函数原型:
#include
#include
#include
intopen(constchar*path,intoflag,…);
函数功能:
open()在文件和文件描述符之间建立了一个连接,它创建了一个指向一个文件的打开文件描述,参数path指向文件的路径名。
2 创建一个新文件或者重写一个已经存在的文件
函数原型:
#include
#include
#include
intcreat(constchar*path,mode_tmode);
函数功能:
该函数调用creat(path,mode)相当于open(path,o_wronly/o_creat/o_trunc,mode);
3 设置文件的创建标记
函数原型:
#include
#include
mode_tumask(mode_tcmask);
函数原型:
umask()设置进程的文件模式创建标记到cmask,并且返回原来的标记值。
4 连接到一个文件
函数原型:
intlink(constchar*existing,constchar*new);
函数功能:
参数existing指向路径名来命名存在文件,参数new指向一个路径名,它命名了一个创建的新的目录入口。
该函数为已存在的文件自动的创建一个新的连接,并且将文件连接数加1。
5.4 特殊文件创建
1 生成一个目录
函数原型:
#include
#include
intmkdir(constchar*path,mode_tmode);
函数功能:
该函数依据参数path创建一个新的目录。
新目录的允许位根据mode初始化。
2 创建一个FIFO类型的文件
函数原型:
#include
#includesys/stat.h>
intmkfifo(constchar*path,mode_tmode);
函数功能:
mkfifo()创建一个新的fifo类型文件,它由path指向的路径名命名。
5.5 文件的移动
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- POSIX 标准 理解
![提示](https://static.bdocx.com/images/bang_tan.gif)