收藏 分销(赏)

POSIX统一标准理解专业资料.doc

上传人:丰**** 文档编号:2803705 上传时间:2024-06-06 格式:DOC 页数:44 大小:165.54KB
下载 相关 举报
POSIX统一标准理解专业资料.doc_第1页
第1页 / 共44页
POSIX统一标准理解专业资料.doc_第2页
第2页 / 共44页
POSIX统一标准理解专业资料.doc_第3页
第3页 / 共44页
POSIX统一标准理解专业资料.doc_第4页
第4页 / 共44页
POSIX统一标准理解专业资料.doc_第5页
第5页 / 共44页
点击查看更多>>
资源描述

1、POSIX原则理解POSIX原则总体分析 POSIX,全称为可移植性操作系统接口,是一种关于信息技术IEEE原则。它涉及了系统应用程序接口(简称API),以及实时扩展C语言。该原则目是定义了原则基于UNIX操作系统系统接口和环境来支持源代码级可移植性。当前,原则重要提供了依赖C语言一系列原则服务,再将来版本中,原则将致力于提供基于不同语言规范。该原则对核心需求某些定义了一系列任何编程语言都通用服务,这一某些服务重要从其功能需求方面阐述,而非定义依赖于编程语言接口。语言规范重要有两某些构成。一某些涉及了访问核心服务编程语言原则接口,这些核心服务为原则中基于编程语言核心需求某些所定义;另一某些包括

2、了一种特殊语言服务原则接口。基于任何语言,与该原则一致执行都必要遵循语言规范任何章节。该原则一共被分为四个某些:(1)陈述范畴和一系列原则参照(第一章);(2)定义和总概念;(第二章)(3)各种接口设备;(第三章到第九章,第十一章到第十五章)(4)数据互换格式;(第十章)该原则重要目有:(1)面向应用(2)定义接口,而不是它详细实现;(3)涉及资源和可移植性,而非对象;(4)基于c语言;(5)无超级顾客,无系统管理;(6)最小限度接口,最小限度定义;(7)应用领域广泛;(8)对此前实现进行最小限度变化;(9)对原有程序代码做最小修改;(10)实时扩展;如下就对各个章节做简要分析。第一章概述11

3、范畴定义范畴核心要素有:(1)定义足够一套功能合用于实时应用程序领域重要某些;(2)定义足够实现规范和性能有关函数,以便容许实时应用程序完毕系统拟定性响应;12一致性系统须支持原则中定义接口,系统可以提供原则中没有规定到函数和工具。在遵循于该原则实现中,一种一致性文档是需要用到,它必要具备与该原则相似构造,包具有全名,数字,和原则所批示日期,以及头文献和中界限值等等。该一致性文档详细阐明了原则中定义执行行为。该原则规定了应用程序一致性,所有遵循原则应用程序都使用基于c语言服务。第二章术语和基本需求21定义(1)术语该原则中定义了一系列术语,如一致性文档,被定义实现,也许性,无用特性等,还定义了

4、某些通用名词,如绝对途径,存取模式,地址空间,恰当权限,定期器,异步I/O操作,后台进程,后台进程组,块文献,阻塞进程,等等。(2)基本概念 扩展安全控制;文献存取容许;文献级别;文献名可移植性;途径名决定;(3)错误号大某些函数都在外部变量errno中提供了错误号,定义如下:extern int errno;(4)简朴系统数据类型这些数据类型在头文献中定义,它包括了至少如下类型:dev_t:用于设备号;gid_t:用于进程标志符;ino_t:用于文献序列号;inode_t: 用于某些文献参数;nlink_t:用于连接内容;off_t:用于文献大小;pid_t: 用于进程或进程组标志符;siz

5、e_t: 在c原则(2)中定义;ssize_t:用于返回字节数和错误标志函数;uid_t:用于顾客标志符;(5)环境描述当一种进程开始执行时,将调用一种表达环境字符串数组,这个数组为外部变量environ所指向,其定义如下:extern char *environ;(6)其她在该章中,原则还总体简介了c语言定义某些标志符,数字方面限制,以及某些符号常量,这些在后来章节中都会一一浮现。如下是OSE服务简要设计描述一种清单。这些规定详细论述在POSIX规范书中。l 进程源语进程源语所涉及函数完毕了大多数简朴操作系统服务,如进程解决,进程信号,以及定期器。普通状况下,该原则所拟定进程所有属性都不能被

6、一种进程源语变化,除非描述符特别指明。l 进程环境l 目录与文献目录与文献所涉及函数执行了一系列操作系统服务,例如文献创立和删除,检测,修改特性。它们提供了重要办法,进程由于一系列I/O操作使用她们来存取文献和目录。l 输入输出原语 这些子文献和管道函数解决输入和输出。功能被指定为进行文献描述符管理和I/O活动之间得平衡调节。l 设备驱动和分类函数 该章节描述了一种基本终端接口和某些基本终端控制函数,如果执行时被提供,所有异步通信端口都应当支持它,接口是支持网络连接还是异步端口或者两者都支持由完毕者定义,一致性文档应当描述那些设备类型被这些接口所支持。本章某些函数重要应用与进程控制终端l 基于

7、c语言得服务l 系统数据库l 数据互换格式l 异步l 内存管理l 执行调度l 时钟和定期器l 消息传递第三章进程原语31进程创立和执行1进程创立函数原型:pid_t fork (void)函数功能:调用时需要引用头文献是,fork()创立了一种新进程。2执行一种文献函数原型:int exec1(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 *pa

8、th,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()或_exit()函数时正常终结;(2)被abort()函数祈求或者接受到某些信

9、号时不正常终结;1等待进程终结 函数原型:#include#includepid_t wait(int *stat_loc);pid_t waitpid(pid_t pid,int *stat_loc.int options);函数功能:wait()和waitpid()容许调用进程获得它一种子进程状态信息。Wait()函数将挂起调用进程直到获得了它子进程状态信息,或者是直到获得一种终结进程信号;如果pid1并且options=0,waitpid()函数功能将和waitpid()相似,否则它功能将根据pid和options值而变化。2.终结一种进程函数原型:void_exit(int statu

10、s);函数功能:_exit()函数将终结一种调用进程,该函数不能返回给其调用者3.3信号在头文献终声明了sigset_t类型和sigaction构造。完毕所定义信号分三类:必须信号;任务控制信号;内存保护信号,分别如下表:必须信号符号常量描述SIGABRT非正常终结信号SIGALRM超时信号SIGFPE错误运算操作SIGHUP为控制中断所检测到挂断SIGILL无效硬件信号检测SIGINT交互式信号SIGKILL终结信号SIGPIPE写信号SIGQUIT交互式终结信号SIGSEGV无效内存引用检测信号SIGTERM终结信号SIGUSR1保存信号SIGUSR2保存信号作业控制信号符号常量描述SIG

11、CHLD子进程终结或停止SIGCONT停止后继续SIGSTOP停止信号SIGTSTP交互式停止信号SIGTTIN从控制终端读SIGTTOU写到控制终端内存保护信号符号常量描述SIGBUS获取内存中不拟定某些每一种进程有一种进程标记(process mask),它定义了一组产生但被阻塞传递信号集。Sigaction(),sigpromask(),sigsuspend()函数控制这个进程标记行为。1.送一种信号到进程函数原型:#include #includeint kill(pid_t pid,int sig)函数功能:该函数发送一种信号到一种由pid指明进程或者进程组,sig标志了信号类型,其

12、值是0或者上表中值。如果发送成功,返回0,否则返回1。2.操纵信号集函数原型:#includeint sigemptyset(sigset_t *set);int sigfillset(sigset_t *set);int sigaddset(sigset_t *set,int signo);int sigdelset(sigset_t *set,int signo);int sigisemeber(const sigset_t *set,int signo);函数功能:sigsetops源语操纵信号集。她们操作以数字为对象,这些数据由应用程序地址所指向,而不是以系统所知信号集为对象。3.检测

13、和更改信号行为函数原型:#includeint sigaction(int sig,const struct sigaction *act,struct sigaction *oact);函数功能:该函数容许调用函数检查与拟定信号相联系行为,参数sig拟定了信号,sigaction构造在头文献中被定义,描述了所采用行为。如果参数act不为null,它指向一种构造,它指定了与信号相联系行为。如果参数oact不为null,先前与信号相联系行为将被存储到由oact指向地方。4.检查和变化阻塞信号函数原型:#includeint sigprocmask(int how,xonst sigset_t *

14、set,sigset_t *oset);函数功能:该函数用来检查和变化调用进程信号标记(signal mask),如果参数set不为null,它指向一种信号集用于变化当前阻塞集。参数how指明了变化方式,参数oset不为null时,先前信号标记被存储在它所指向地方,如果参数set为null,则参数how就没故意义了,并且进程信号标记不能随函数调用而变化。5.检查未定信号函数原型:#includeint sigpending(sigset_t *set);函数功能:该函数存储一种信号集,这些信号是在被调用进程传播和未定状况下阻塞,由参数set所指向。6.等待一种信号函数原型:#includein

15、t sigsuspend(const sigset_t *sigmask);函数功能:该函数用参数sigmask所指向信号集取代了进程信号标记(signal mask),然后挂起该进程直到接受到一种信号,其行为是执行信号跟踪功能或者是终结该进程。7.同步接受一种信号函数原型:#include int sigwaitinfo(const sigset_t *set,siginfo_t *info); int sigtimedwait(const sigset_t *set,siginfo_ *info,const struct timespec *timeout );函数功能:该函数从参数set

16、所拟定信号集中选取一种未定信号出来。如果该函数成功,返回一种信号数;否则返回1。8.排队一种信号到进程函数原型:#includeint sigqueue(pid_t pid,int signo,const union sigval value);函数功能:该函数功能是使由signo拟定信号将参数value所拟定值发送到由pid指明进程中去。3.4定期器操作1调度警报函数原型:unsigned int alarm(unsigned int seconds);函数功能:当参数seconds指定一段实时时间过去后,该函数将发送一种SIGALRM信号到调用进程。2.挂起进程执行函数原型:int pau

17、se(void);函数功能:该函数挂起一种调用进程直到得到一种信号,这个信号或者执行信号跟踪功能或者是终结该进程。如果是终结进程,该函数不返回;如果是执行信号跟踪功能,则该函数在信号跟踪函数返回后也要返回。3.延迟进程执行函数原型:unsigned int sleep(unsigned int seconds);函数功能:该函数使当迈进程从执行状态转化为挂起状态,直到参数seconds所指定一段实时时间过去后,或者是一种唤醒信号跟踪功能或终结进程功能信号到来。该挂起时间由于系统其她调度活动也许会比规定期间长。第四章进程环境4.1进程标志符1.获得进程和父进程ID函数原型:#includepid

18、_t getpid(void);pid_t getppid(void);函数功能:getpid()返回调用进程进程ID,getppid()返回调用进程父进程ID.4.2顾客ID1获得真实顾客,有效顾客,真是组,有效组ID函数原型:#includeuid_t getuid(void);uid_t geteuid(void);gid_t getgid(void);gid_t getegid(void);函数功能:getuid()返回调用进程真实顾客ID,geteuid()返回调用进程有效顾客ID,getgid()返回调用进程真实组ID,getegid()返回调用进程有效组ID。2.设立顾客和组ID

19、函数原型:#includeint setuid(uid_t uid);int setgid(gid_t gid);函数功能:这两个函数分别依照进程权限设立真实顾客ID,有效顾客ID,真实组ID,有效组ID。3.获得辅助组ID函数原型:# includeint getgroups(int gidsetsize.gid_t grouplist);函数功能:该函数在队列组列表中填入调用进程辅助组ID。参数grouplist拟定了组列表中元素个数。4.获得顾客名函数原型:char *getlogin(void)函数功能:该函数返回一种指针,指向与调用进程有关顾客名。4.3进程组1.获得进程组ID函数原

20、型:#includepid_t getpgrp(void);函数功能:该函数返回调用进程进程组ID。2.创立会议并且设立进程组ID函数原型:#includepid_t setsid(void)函数功能:如果调用进程不是进程组引导者,则该函数将创立一种新会议。该调用进程应当为新会议会议引导者,应当为新进程组引导,应当没有控制终端。进程组ID应当等于该调用进程ID。3.为作业控制设立进程组ID函数原型:#includeint setpgid(pid_t pid,pid_t pgid);函数功能:如_POSIX_JOB_CONTROL被定义,则该函数用来加入已经存在进程组或者创立一种新进程组。4.4

21、系统标志1.获得系统名函数原型:#includeint uname(struct utsname *name);函数功能:该函数存储了鉴别当前操作系统信息。4.5时间1得到系统时间函数原型:#includetime_t time(time_t *tloc);函数功能:该函数返回自从一时间点以来某个时间值,以秒为单位。参数tloc指向一种时间值所存储地方。2.获得进程时间函数原型:#includeclock_t times(struct time *buffer);函数功能:参数buffer指向一种构造,该函数向该构造填写关于时间信息。Clock_t和tms构造在中定义。46环境变量1.获取环境

22、函数原型:#includechar *getenv(const char *name);函数功能:该函数在环境列表查找字符串name=value,返回指向value指针。如果没有找到,则返回null。4.7终端标志1产生终端途径函数原型:#includechar Ictermid(char *s);函数功能:该函数产生一种字符串,作为途径名,提交到当迈进程当前控制终端。2拟定终端设备名函数原型:char *ttyname(int fildes);int isatty(int fildes);函数功能:ttyname()返回一种指针指向一种字符串,它包括了与文献描述符fildes有关终端名;如果

23、fildes是一种有效与终端联系文献描述符,isatty()返回“1”,否则返回“0”。48可配备系统变量1获得可配备系统变量函数原型:#includelong sysconf(int name);函数功能:该函数提供了一种应用办法来决定可配备系统变量当前值。参数name代表了所查询系统变量。第五章文献和目录51目录1目录入口形式头文献定义了一种构造和目录程序用到类型,没有拟定文献内部格式。Readdir()返回了一种指针指向一种类型对象struct dirent。2目录操作函数原型:#include#includedir *opendir(const char *dirname);struc

24、t dirent *readdir(dir *dirp);void rewinddir(dir *dirp);int closedir(dir *dirp);函数功能:opendir()依照参数dirname打开一种目录流;readdir()返回一种指针,它指向一种目录流中当前位置目录入口,目录流由参数dirp指向;rewinddir()重置目录流位置到目录起点;closedir()关闭目录流,如成功,则返回“0”值。52工作目录1变化当前工作目录函数原型:int chdir(const char *path);函数功能:path指向目录途径名。该函数使命名录录成为当前工作目录。2获得工作目录

25、途径名函数原型:char *getcwd(char *buf,size_t size);函数功能:该函数复制当前工作目录绝对途径名到buf所指向队列中。53基本文献创立1打开一种文献函数原型:#include#include#includeint open(const char *path,int oflag,);函数功能:open()在文献和文献描述符之间建立了一种连接,它创立了一种指向一种文献打开文献描述,参数path指向文献途径名。2创立一种新文献或者重写一种已经存在文献函数原型:#include#include#includeint creat(const char *path,mod

26、e_t mode);函数功能:该函数调用creat(path,mode)相称于open(path,o_wronly/o_creat/o_trunc,mode);3设立文献创立标记函数原型:#include#includemode_t umask(mode_t cmask);函数原型:umask()设立进程文献模式创立标记到cmask,并且返回本来标记值。4连接到一种文献函数原型:int link(const char *existing,const char *new);函数功能:参数existing指向途径名来命名存在文献,参数new指向一种途径名,它命名了一种创立新目录入口。该函数为已存在

27、文献自动创立一种新连接,并且将文献连接数加1。54特殊文献创立1生成一种目录函数原型:#include#includeint mkdir(const char *path,mode_t mode);函数功能:该函数根据参数path创立一种新目录。新目录容许位依照mode初始化。2创立一种FIFO类型文献函数原型:#include#includesys/stat.hint mkfifo(const char *path,mode_t mode);函数功能:mkfifo()创立一种新fifo类型文献,它由path指向途径名命名。55文献移动1移动目录入口函数原型:int unlink(const

28、char *path);函数功能:该函数移去由参数path指向得途径名所命名得连接并将连接数减去1。2移去一种目录函数原型:int rmdir(const char *path)函数功能:3重命名一种文献函数原型:int rename(const char *old,const char *new);函数功能:该函数变化一种文献名字,参数old指向被重命名文献途径名,参数new指向文献新途径名。56文献特性57可配备途径名变量第六章输入与输出源语61管道1创立内进程通道函数原型:int pipe(int filedw2);函数功能:该函数创立一种管道并且创立两个文献描述符,一种是fildes0

29、,一种是fildes1,它们分别指是读与写管道端。62文献描述符控制 1复制一种打开文献描述符函数原型:int dup(int fildes);int dup2(int fileds,int fileds2);函数功能:这两个函数为fcntl()服务提供了两个选取接口,用到了F_DUPFD命令。63撤除文献描述符1关闭一种文献函数原型:int close (int fildes);函数功能64输入和输出1文献读函数原型:ssize_t read(int fildes,void *buf,size_t nbyte);函数功能:2文献写函数原型:ssize_t write(int fildes,c

30、onst void *buf,size_t nbyte);函数功能:65一种文献控制操作1文献控制操作数据定义头文献为fcntl()和open()定义了一下规定和参数:fcntl()_cmd值常量描述F_DUPFDF_GETFDF_GETLKF_SETFDF_GETTFLF_SETFLF_SETLKF_SETLKW2文献控制函数原型:#clude #clued#includeint fcntl(int fildes,int cnd,);函数功能:fcntl()为打开文献提供了一系列控制,参数fildes是一种文献描述符。Cmd决定了控制内容。3读/写文献偏移量重新定位函数原型:#include

31、#includeoff_t lseek(int fildes,off_t offset,int whence);函数功能:lseek()为fildes所指定文献重新设立偏移量。66文献同步1文献状态同步函数原型:#includeint fsync(int fildes);函数功能:该函数用来暗示所有文献描述数据被传播到了存储设备上。2文献数据同步函数原型:#includeint fdatasync(int fildes);函数功能:该函数迫使当前所有排队I/O操作进入同步I/O状态。67异步输入与输出1异步输入与输出数据定义头文献能使,和中符号可见。异步I/O控制块异步I/O控制块构造aioc

32、b在许多异步I/O接口中使用,它在中定义。重要常量2异步读函数原型:#includeint aio_read (struct aiocb *aiocbp);函数功能:aiocbp-io_nbytes,表达读字节数;aiocbp-aio_fildes,表达读文献;aiocbp-aio_buf,表达读到缓冲区。3异步写函数原型:#includeint aio_write(struct aiocb *aiocbp);函数功能:参数表达同上。4列出直接I/O函数原型:#includeint lio_listio(int mode,struct aiocb *const list,int nent,st

33、ruct sigevent *sig);函数功能:该函数容许用一种函数调用初始化一种I/O祈求列表。5得到异步I/O操作错误状态函数原型:#includeint aio_error(const struct aiocb *aiocbp);函数功能:该函数返回aiocbp指向构造所示错误状态。6得到异步I/O操作返回状态函数原型:#include ssize_t aio_return(struct aiocb *aiocbp);函数功能:7删除异步I/O祈求函数原型:#includeint aio_cancel (int fildes,struct aiocb *aiocbp);函数功能:参数f

34、ildes是文献描述符,参数aiocbp指向异步I/O控制块上祈求删除某些。8等待异步I/O祈求函数原型:#includeint aio_suspend(const struct aiocb *const list,int nent,const struct timespec *timeout);函数功能:原则定义该函数挂起调用进程直到至少一种list指向异步I/O操作完毕,或者一种信号中断了一种函数,或者超时了(timeout指定)。9异步文献同步化函数原型:#includeint aio_fsync(int op,struct aiocb *aiocbp);函数功能:该函数迫使所有与(参数

35、aiocbp指向)构造aiocb中aio_fildes所指定文献有关异步I/O操作进入同步状态。第七章设备和面向类函数71基本终端接口1接口特性当一种终端文献被打开,普通它将引起进程等待直到连接被建立。进程组一种终端可以具备与它有关前台进程组,它发挥特定角色,背面会讲到。控制终端终端存取控制输入操作和读进程规范输入操作非规范模式输入操作写数据和输出解决特殊符号(INTR,QUIT,ERASE,KILL)modem断掉连接关闭终端设备文献2可设立参数termios机构该构造在中定义,在控制特定终端I/O特性中要用到。输入模式 termios c_iflap值域标记名描述BRKINT信号中断ICR

36、NL输入时将CR映射到NLIGNBRK忽视中断状态IGNCR忽视CRIGNPAR忽视奇偶错误INLCR输入时将NL映射到CRINPCK输入奇偶校验使能ISTRIPStrip字符IXOFF开始/停止输入控制使能IXON开始/停止输出控制使能PARMRK产生奇偶错误输出模式控制模式标记名描述CLOCAL忽视modem状态行CREAD接受使能CSIZE每个字节位数CS55位CS66位CS77位CS8 8位CSTOPB发送一种或两个停止位HUPCL在最后关闭中挂起PARENB奇校验使能PARODD奇校验或偶校验本地模式termios c_lflag值标记名描述ECHO响应使能ECHOE响应ETASEE

37、CHOK响应KILLECHONL响应/nICANON规范输入IEXTEN扩展函数使能ISIG信号使能NOFLSH中断,停止或挂起后关掉flushTOSTOP为后台输出发送SIGTTOU特殊控制字符这些特殊控制字符值在队列c_cc中定义,分为规范和非规范两种模式。波特率值3波特率函数函数原型:#includespeed_t cfgetospeed(const struct termios *termios_p);int cfsetospeed (struct termios *termios_p,speed_t speed);speed_t cfgetispeed(const struct te

38、rmios *termios_p);int cfsetispeed(struct termios *termios_p,speed_t speed);函数功能:以上这些接口被用来在termios构造获得和设定输入与输出波特率值。72基本终端接口控制函数1获得并设定状态函数原型:#includeint tcgetattr(int fildes,struct termios *termios_p);int tcsetattr(int fildes,int optional_actions,const struct termios * termios_p);函数功能:tcgetattr()获得fil

39、des所拟定文献参数并将其存储在terops_p所指向构造中;tcsetattr()将设立参数。2行控制函数函数原型:#includeint tcsendbreak(int fildes,int duration);int tcdrain(int fildes);int tcflush(int fildes,int queue_selector);int tcflow(int fildes,int action)函数功能:如果终端使用异步持续数据传播,tcsendbreak()引起在一段时间内持续0位传播;tcdrain()等待直到输出传播完毕;tcflush()和tcflow()是溢出有关解决。(参照第212页)3获得前台进程组ID函数原型:#includepid_t tgetpgrp(int fildes);功能:4设立前台进程组ID函数原型:#includeint tcsetpgrp(int fildes,pid_t pgrp_id);功能:如果进程支持控制终端,该函数设立与终端有关前台进程组ID到pgrp_id。第八章基于C语言服务8.1参照C语言规范1时间函数扩展2 setlocale()函数扩展

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 品牌综合 > 行业标准/行业规范

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服