POSIX标准理解_第1页
POSIX标准理解_第2页
免费预览已结束,剩余37页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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)实时扩展;以下就对各个章节做简要分析。第一章概述11范围 定义范围的关键要素有:(1)定义足够的一套功能适用于实时应用程序领域的重要部分;(2)定义足够的实现规范和性能相关的函数,以便允许实时应用程序完成系统 的确定性的响应;12一致性 系统须支持标准中定义的接口,系统能够提供标准中没有要求到的函数和工具。 在遵循于该标准的实现中, 一种一致性文档是需要用到的, 它必须具有与该标准 相同的结构,包含有全名,数字,和标准所指示的日期,以及头文件和vunistd.h中的界限值等等。该一致性文档详细说明了标准中定义的执行行为。 该标准要求了应用程序的一致性, 所有遵循标准的应

4、用程序都使用基于c语言的 服务。第二章术语和基本需求21定义(1)术语 该标准中定义了一系列术语,如一致性文档,被定义的实现,可能性,无用的特 性等,还定义了一些通用名词,如绝对路径,存取模式,地址空间,适当权限, 定时器,异步I/O操作,后台进程,后台进程组,块文件,阻塞进程,等等。(2)基本概念 扩展安全控制;文件存取允许;文件级别;文件名可移植性;路径名的决定;(3)错误号大部分函数都在外部变量errno中提供了错误号,定义如下:extern int errno;(4)简单系统的数据类型这些数据类型在头文件vsys/types.h中定义,它包含了至少以下类型:gid_t:用于进程标志符;

5、ino_t:用于文件序列号;inode_t:用于一些文件参数;nlink_t:用于连接内容;off_t:用于文件大小;pid_t:用于进程或进程组标志符;size_t:在c标准(2)中定义;dev_t:用于设备号;ssize_t:用于返回字节数和错误标志的函数;uid_t:用于用户标志符;(5)环境描述当一个进程开始执行时, 将调用一个表示环境的字符串数组, 这个数组为外部变 量environ所指向,其定义如下:extern char *environ;(6)其他在该章中, 标准还总体介绍了c语言定义的一些标志符, 数字方面的限制, 以及 一些符号常量,这些在以后的章节中都会一一出现。以下是O

6、SEK务的简要设计描述的一个清单。这些要求详细叙述在POSIX规范书中。进程源语进程源语所涉及的函数完成了大多数简单的操作系统服务, 如进程处理, 进程信 号,以及定时器。 一般情况下, 该标准所确定的进程的所有属性都不能被一个进 程源语改变,除非描述符特别指明。进程环境目录与文件 目录与文件所涉及的函数执行了一系列操作系统服务,例如文件的创建和删除,检测,修改特性。它们提供了主要的方法,进程因为一系列I/O操作使用他们 来存取文件和目录输入输出原语这些子文件和管道函数处理输入和输出。功能被指定为进行文件描述符管理 和I/O活动之间得平衡调节。设备驱动和分类函数该章节描述了一个基本的终端接口和

7、一些基本的终端控制函数,如果执行时 被提供,所有的异步通信端口都应该支持它, 接口是支持网络连接还是异步端口 或者两者都支持由完成者定义,一致性文档应该描述那些设备类型被这些接口所 支持。本章的一些函数主要应用与进程的控制终端基于c语言得服务系统数据库数据交换格式内存管理执行调度 时钟和定时器 消息传递第三章进程原语31进程的创建和执行1进程创建函数原型:pid_t fork (void)函数功能:调用时需要引用的头文件是,fork()创建了一个 新的进程。2执行一个文件函数原型:int exec1(c onst char *path, const char *arg,);int execv(

8、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);函数功能:exec系列的函数用一个新的进程映像替代了当前的进程映像,这个新的进程映像创建于一个规则的,可执行文件,叫

9、做新进程映像文件。执行成功无返回值因为调用进程映像以为新的进程映像所覆盖。3.2进程的终止进程的终止有两种情况:(1) 从main()函数返回时或者执行exit()或_exit()函数时正常的终止;(2)被abort()函数请求或者接受到一些信号时不正常的终止;1等待进程终止函数原型:#in clude#in cludepid_t wait(i nt *stat_loc);pid_t waitpid(pid_t pid,i nt *stat_loc.i nt opti on s);函数功能:wait()和waitpid()允许调用进程获得它的一个子进程的状 态信息。Wait()函数将挂起调用进

10、程直到获得了它的子进程的状态信息,或者是直到获得一个终止进程信号; 如果pid=1并且options=0,waitpid()函数功 能将和waitpid()相同,否则它的功能将依据pid和options的值而改变。2.终止一个进程函数原型:void_exit( int status);函数功能:_exit()函数将终止一个调用进程,该函数不能返回给其调用 者3.3信号在头文件终声明了sigset_t类型和sigaction结构。完成所定义的 信号分三类:必需的信号;任务控制信号;内存保护信号,分别如下表:必需信号符号常量描述SIGABRT非正常终止信号SIGALRM超时信号SIGFPE错误运算

11、操作SIGHUP为控制中断所检测到的挂断SIGILL无效硬件信号的检测SIGINT交互式信号SIGKILL终止信号SIGPIPE写信号SIGQUIT交互式终止信号SIGSEGV无效内存引用检测信号SIGTERM终止信号SIGUSR1保留信号SIGUSR2保留信号作业控制信号符号常量描述SIGCHLD子进程终止或停止SIGCONT停止后继续SIGSTOP停止信号SIGTSTP交互式的停止信号SIGTTIN从控制终端读SIGTTOU写到控制终端内存保护信号符号常量描述SIGBUS获取内存中不确定的部分每一个进程有一个进程标记(process mask),它定义了一组产生但被阻塞传递的信号集。Sig

12、action(),sigpromask(),sigsuspend()函数控制这个进程标记的行为。1.送一个信号到进程函数原型:#in elude #in cludevsig nal.hint kill(pid_t pid, int sig)函数功能:该函数发送一个信号到一个由pid指明的进程或者进程组,sig标志 了信号类型,其值是0或者上表中的值。如果发送成功,返回0,否则返回 1。2.操纵信号集函数原型:#includeint sigemptyset(sigset_t *set);int sigfillset(sigset_t *set);int sigaddset(sigset_t *s

13、et, int signo);int sigdelset(sigset_t *set, int signo);int sigisemeber(const sigset_t *set,int signo);函数功能:sigsetops源语操纵信号集。他们操作以数字为对象,这些数据由 应用程序的地址所指向,而不是以系统所知的信号集为对象。3.检测和更改信号的行为函数原型:#includeint sigaction(int sig,const struct sigaction *act,structsigaction *oact);函数功能:该函数允许调用函数检查与确定的信号相联系的行为,参数sig

14、确定了信号,sigaction结构在头文件中被定义,描述了 所采取的行为。如果参数act不为null,它指向一个结构,它指定了与信号相联 系的行为。如果参数oact不为null,先前与信号相联系的行为将被存储到由oact指向的地方。4.检查和改变阻塞信号函数原型:#includeint sigprocmask(int how,xonst sigset_t *set,sigset_t *oset);函数功能:该函数用来检查和改变调用进程的信号标记(signal mask),如 果参数set不为null,它指向一个信号集的用于改变当前的阻塞集。参数how指明了改变方式, 参数oset不为null时

15、,先前的信号标记被存储在它所指向的 地方,如果参数set为null,则参数how就没有意义了,而且进程的信号标记 不能随函数调用而改变。5.检查未定的信号函数原型:#includeint sigpending(sigset_t *set);函数功能: 该函数存储一个信号集, 这些信号是在被调用进程传输和未定的情 况下阻塞的,由参数set所指向。6.等待一个信号函数原型:#includeint sigsuspend(const sigset_t *sigmask);函数功能:该函数用参数sigmask所指向的信号集取代了进程信号标记 (signalmask),然后挂起该进程直到接受到一个信号,其

16、行为是执行信号跟 踪功能或者是终止该进程。7.同步接受一个信号函数原型:#includeint sigwaitinfo(const sigset_t *set, siginfo_t *info);int sigtimedwait(const sigset_t *set,siginfo_ *info, const struct timespec*timeout );函数功能: 该函数从参数set所确定的信号集中选择一个未定的信号出来。 如 果该函数成功,返回一个信号数;否则返回1。8.排队一个信号到进程函数原型:#includeint sigqueue(pid_t pid,int signo,

17、const union sigval value);函数功能:该函数功能是使由signo确定的信号将参数value所确定的值发送 到由pid指明的进程中去。3.4定时器操作1调度警报函数原型:unsigned int alarm(unsigned int seconds);函数功能: 当参数seconds指定的一段实时时间过去后, 该函数将发送一 个SIGALRM信号到调用进程。2.挂起进程的执行函数原型:int pause(void);函数功能: 该函数挂起一个调用进程直到得到一个信号, 这个信号或者执 行信号跟踪功能或者是终止该进程。 如果是终止进程, 该函数不返回; 如果是执 行信号跟踪

18、功能,则该函数在信号跟踪函数返回后也要返回。3.延迟进程的执行函数原型:unsigned int sleep(unsigned int seconds);函数原型:#include函数功能:该函数使当前进程从执行状态转化为挂起状态,直到参数seconds所指定的一段实时时间过去后, 或者是一个唤醒信号跟踪功能或终止进程功能的 信号到来。该挂起时间由于系统的其他调度活动可能会比要求的时间长。第四章进程环境4.1进程标志符1.获得进程和父进程的ID函数原型:#includepid_t getpid(void);pid_t getppid(void);函数功能:getpid()返回调用进程的进程ID

19、,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.设置用户和组的IDint setuid(uid_t uid);int setgid(gid_t gid);函数功能

20、:这两个函数分别根据进程的权限设置真实用户ID,有效用户ID,真实组ID,有效组ID。3.获得辅助组ID函数原型:# includeint getgroups(int gidsetsize.gid_t grouplist);函数功能:该函数在队列的组列表中填入调用进程的辅助组ID。参数grouplist确定了组列表中的元素个数。4.获得用户名函数原型:char *getlogin(void)函数功能:该函数返回一个指针,指向与调用进程相关的用户名。4.3进程组1.获得进程组ID函数原型:#includepid_t getpgrp(void);函数功能:该函数返回调用进程的进程组ID。2.创建会

21、议并且设置进程组ID函数原型:#includepid_t setsid(void)函数功能:如果调用进程不是进程组的引导者, 则该函数将创建一个新的会议。 该调用进程应该为新会议的会议引导者, 应该为新进程组的引导, 应该没有控制 终端。进程组的ID应该等于该调用进程的ID。3.为作业控制设置进程组ID函数原型:#includeint setpgid(pid_t pid,pid_t pgid);函数功能:如匕POSIX_JOB_CONTROL定义,则该函数用来加入已经存在的进 程组或者创建一个新的进程组。4.4系统标志函数原型:char *ttyname(int fildes);1.获得系统名

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

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

24、述符,isatty()返回“1”,否则返回“0”。函数原型:int chdir(const char *path);48可配置的系统变量1获得可配置的系统变量函数原型:#includelong sysconf(int name);函数功能: 该函数提供了一个应用方法来决定可配置系统变量的当前值。参数name代表了所查询的系统变量。第五章文件和目录51目录1目录的入口形式头文件定义了一个结构和目录程序用到的类型, 没有确 定的文件内部格式。Readdir()返回了一个指针指向一个类型对象struct dirent 2目录操作函数原型:#include#includedir *opendir(co

25、nst char *dirname);struct dirent *readdir(dir *dirp);void rewinddir(dir *dirp);int closedir(dir *dirp);函数功能:opendir()根据参数dirname打开一个目录流;readdir()返回一 个指针,它指向一个目录流中当前位置的目录入口,目录流由参数dirp指向;rewinddir()重置目录流的位置到目录的起点;closedir()关闭目录流,如 成功,则返回“0”值。52工作目录1改变当前的工作目录函数原型:int link(const char *existing,const cha

26、r *new);函数功能:path指向目录的路径名。该函数使命名的目录成为当前的 工作目录。2获得工作目录路径名函数原型:char *getcwd(char *buf,size_t size);函数功能:该函数复制当前工作目录的绝对路径名到buf所指向的队列 中。53基本文件的创建1打开一个文件函数原型:#include #include #includeint ope n(const char *pa th, int oflag,);函数功能:open()在文件和文件描述符之间建立了一个连接,它创建 了一个指向一个文件的打开文件描述,参数path指向文件的路径名。2创建一个新文件或者重写一个

27、已经存在的文件函数原型:#include #include #include intcreat(const char *path, mode_t mode);函数功能:该函数调用creat(path,mode相当于open(path,o_wronly/o_creat/o_trunc,mode);3设置文件的创建标记函数原型:#include #include mode_tumask(mode_t cmask);函数原型:umask()设置进程的文件模式创建标记到cmask,并且返回 原来的标记值。4连接到一个文件函数功能:参数existing指向路径名来命名存在文件,参数new指向一个路径名,

28、 它命名了一个创建的新的目录入口。 该函数为已存在的文件自动的 创建一个新的连接,并且将文件连接数加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指向的 路径名命名

29、。55文件的移动1移动目录入口函数原型:int unlink(const char *path);函数功能:该函数移去由参数path指向得路径名所命名得连接并将连 接数减去1。2移去一个目录函数原型:int rmdir(const char *path)函数功能:3重命名一个文件函数原型:int rename(const char *old,const char *new);函数功能: 该函数改变一个文件的名字, 参数old指向被重命名文件的路径名,参数new指向文件的新路径名56文件特征5.7可配置路径名变量第六章输入与输出源语6.1管道1创建内进程通道函数原型:in t pipe(i nt

30、 filedw2);函数功能:该函数创建一个管道并且创建两个文件描述符,一个是fildesO,个是fildes1,它们分别指的是读与写的管道端。6.2文件描述符控制1复制一个打开文件描述符函数原型:int dup(i nt fildes);int dup2(i nt fileds, int fileds2);函数功能: 这两个函数为fcntl()服务提供了两个选择的接口, 用 至U了F_DUPF命令。6.3撤除文件描述符1关闭一个文件函数原型:in t close (int fildes);函数功能6.4输入和输出1文件读函数原型:ssize_t read(int fildes,void *b

31、uf,size_t nbyte);函数功能:2文件写函数原型:ssize_t write(i nt fildes,c onst void *buf,size_t n byte);函数功能:6.5一个文件的控制操作1文件控制操作的数据定义头文件fcnt1.h为fcntl()和open()定义了一下的要求和参数:fcntl()的_cmd值常量描述F_DUPFDF_GETFDF_GETLKF_SETFDF_GETTFLF_SETFLF_SETLKF_SETLKW2文件控制函数原型:#clude #clued#in cludevfc ntl.hint fen tl(i nt fildes,i nt e

32、nd,);函数功能:fentl()为打开的文件提供了一系列控制,参数fildes是个文件描述符。Cmc决定了控制的内容。3读/写文件偏移量的重新定位函数原型:#in clude#i ncludev un istd.hoff_t lseek(i nt fildes,off_t offset,i nt whe nee);函数功能:lseek()为fildes所指定的文件重新设置偏移量。6.6文件同步1文件的状态同步函数原型:#includevunistd.hin t fsyn c(i nt fildes);函数功能:该函数用来暗示所有的文件描述数据被传输到了存储设备上2文件数据的同步函数原型:#i

33、 ncludevu nistd.hint fdatas yn c(i nt fildes);函数功能:该函数迫使当前所有排队的I/O操作进入同步I/O状态67异步输入与输出1异步输入与输出的数据定义头文件能使,和vfcntl.h中的符号可见。 异步I/O控制块异步I/O控制块结构aiocb在许多异步I/O接口中使用,它在中定义。 主要常量2异步读函数原型:#includeint aio_read (struct aiocb *aiocbp);函数功能:aiocbp-io_nbytes,表示读的字节数;aiocbp-aio_fildes,表示 读的文件;aiocbp-aio_buf,表示读到的缓

34、冲区。3异步写函数原型:#includeint aio_write(struct aiocb *aiocbp);函数功能:参数表示同上。4列出直接I/O函数原型:#includeint lio_listio(int mode,struct aiocb *const list,int nent,struct sigevent*sig);函数功能:该函数允许用一个函数调用初始化一个I/O请求列表。5得到异步I/O操作的错误状态函数原型:#includeint aio_error(const struct aiocb *aiocbp);函数功能:该函数返回aiocbp指向的结构所表示的错误状态。6得

35、到异步I/O操作的返回状态函数原型:#includessize_t aio_return(struct aiocb *aiocbp);函数功能:7删除异步I/O请求 函数原型:#includeint aio_cancel (int fildes,struct aiocb *aiocbp);函数功能:参数fildes是文件描述符, 参数aiocbp指向异步I/O控制块上的请 求删除部分。8等待异步I/O请求函数原型:#includeint aio_suspend(const struct aiocb *const list,int nent,const structtimespec *timeo

36、ut);函数功能:标准定义该函数挂起调用进程直到至少一个list指向 的异步I/O操作完成,或者一个信号中断了一个函数, 或者超时了(timeout指定)。9异步文件同步化函数原型:#includeint aio_fsync(int op,struct aiocb *aiocbp);函数功能:该函数迫使所有与(参数aiocbp指向的)结构aiocb中aio_fildes所指定的文件相关异步I/O操作进入同步状态。第七章设备和面向类的函数71基本的终端接口1接口特性 当一个终端文件被打开,通常它将引起进程等待直到连接被建立。 进程组 一个终端可以具有与它相关的前台进程组,它发挥特定的角色,后面会

37、讲到。 控制终端终端存取控制输入操作和读进程 规范的输入操作非规范模式的输入操作 写数据和输出处理特殊的符号(INTR,QUIT,ERASE,KILL)modenK掉连接关闭终端设备文件2可设置的参数termios机构该结构在termios.h中定义,在控制特定的终端I/O特性中要用到输入模式termios c_iflap值域标记名描述BRKINT信号中断ICRNL输入时将CR映射到NLIGNBRK忽略中断状态IGNCR忽略CRIGNPAR忽略奇偶错误INLCR输入时将NL映射到CRINPCK输入奇偶校验使能ISTRIPStrip字符IXOFF开始/停止输入控制使能IXON开始/停止输出控制使

38、能PARMRK产生奇偶错误输出模式控制模式标记名描述CLOCAL忽略modertt态行CREAD接受使能CSIZE每个字节的位数CS55位CS66位CS77位CS88位CSTOPB发送一个或两个停止位HUPCL在最后的关闭中挂起PARENB奇校验使能PARODD奇校验或偶校验本地模式termios c_lflag值标记名描述ECHO响应使能ECHOE响应ETASEECHOK响应KILLECHONL响应/nICANON规范输入IEXTEN扩展函数使能ISIG信号使能NOFLSH中断,停止或挂起后关掉flushTOSTOP为后台输出发送SIGTTOU特殊的控制字符这些特殊的控制字符值在队列c_cc

39、中定义,分为规范和非规范两种模式波特率值3波特率函数函数原型:#includespeed_t cfgetospeed(c onst struct termios *termios_p);int cfsetospeed (struct termios *termios_p,speed_t speed);speed_t cfgetispeed(c onst struct termios *termios_p);int cfsetispeed(struct termios *termios_p,speed_t speed);函数功能:以上这些接口被用来在termios结构获得和设定输入与输出的波特

40、率值。72基本的终端接口控制函数1获得并设定状态函数原型:#includeint tcgetattr(int fildes,struct termios *termios_p);int tcsetattr(int fildes,int optional_actions,const struct termios *termios_p);函数功能:tcgetattr()获得fildes所确定的文件的参数并将其存储在terops_p所指向的结构中;tcsetattr()将设置参数。2行控制函数函数原型:#includeint tcsendbreak(int fildes,int duration);

41、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(i

42、nt fildes,pid_t pgrp_id);功能:如果进程支持控制终端,该函数设置与终端相关的前台进程组ID到pgrp_id。第八章基于 C 语言的服务8.1参考的C语言规范1时间函数的扩展2 setlocale()函数的扩展 函数原型:#include char *setlocale(intcategory,const char *locale);函数功能: 该函数根据参数category和locale设置,更改或者查询进程 现场。8.2 C语言输入/输出函数1映射一个流指针到一个文件描述符 函数原型:#include函数功能:该函数返回一个与流相关的整型文件描述符。2根据一个文件描述

43、符打开一个流 函数原型:#includeFILE *fdopen(int fildes,const char *type);函数功能:该函数联合一个流和一个文件描述符。3其他文件类型函数之间的相互作用 一个单一的文件描述说明可以通过流和文件描述符访问,流 或者是文件描述符被称作位打开文件的句柄,一个打开文件说明 可以有多个句柄。句柄可以在不影响重要的打开文件说明的情况 下被创建和删除,创建如fcntl().dup(),fdopen(),fileno(),fork();删除 如fclose(),close()。(1)fopen()随着open()的调用分配描述符,基础函数为open()。(2)f

44、close():该函数完成在与FILE流相关的,对文件描述符的close() 功能。(3)freopen():具有fclose()和fopen()的特点。(4)fflush(): 如果流可写或者缓存数据还没有写入文件时,该函数标记下基础文件st_ctime和st_mtime的 值。5)fgetc(),fgets(),fread(),getc(),getchar(),gets(),scanf(),fscanf():这些函数标记更新的st_atime值。 基础函数是read()和lseek()。(6)fputc(),fputs(),fwrite(),putc(),putchar(),puts(),

45、printf(),fprintf():从以上任一个函数的成功执行到下一个调用(在同一个流中的fflush()或fclose()或exit()或abort(),记下 更新的st_ctime和st_mtime值。基础函数是write()和lseek()。(7)fseek(),rewind():如果流可写或者缓存数据还没有写 入文件时,该函数标记下文件更新的st_ctime和st_mtime值。基础函数是lseek()和write()。(8)perror():记下与标准错误流相关的文件。(9)tmpfile():fopen()执行后为文件分配文件描述符。(10)ftell():基础文件是lseek(

46、)。执行fflush()后执行该函数的结果与执行fflush前执行该函数的结果相同。(11) 报错(12)exit(),abort():exit()终止进程的时候要关闭流,abort()只终止进程对流没有影响。4文件操作 -remove()函数该函数和unlink()函数的功能一样。83其他的C函数1非局部跳转函数原型:#includeint sigsetjmp(sigjmp_buf env,int savemask);void siglongjmp(sigjmp_buf env,int val);函数功能:sigsetjmp()宏要与标准中setjmp()宏的定义一致,如果参数savemas

47、k不为“0”,sigsetjmp()就要保存当前的信号标记作为调用环境的 一部分。Siglongjmp()同理。2设置时间域函数原型:#includevoid tzset(void);函数功能:该函数用环境变量TZ的值来设定时间变化信息。第九章系统数据库91系统数据库 本章描述了两个数据库:组数据库和用户数据库。 组数据库包括的信息有:组名,组的数字ID,组中的用户列表;用户数据库包含的信息有:用户名,用户的数字ID,组的数字ID,初始化的工 作目录,和初始化的用户程序。92数据库的访问1组数据库的访问函数原型:#include#includestruct group *getgrgid(gi

48、d_t gid);struct group *getgrnam(const char *name);函数功能:getgrid()和getgrnam()返回指针,它指向一个structgroup类型的对象,包含了组数据库的入口。2用户数据库的访问函数原型:#include#include struct paswd *getpwuid(uid_t uid);struct passwd *getpwnam(const char *name);函数功能:getpwuid()和getpwnam返回一个指针,指向structpasswd类型的一个对象,它包含了用户数据库的入 口。第十章数据交换形式101归

49、档/交换文件格式1扩展的tar格式sem_t *sem_open(const char *name,int oflag,);2扩展的cpio格式:面向字节的归档格式,包括了文件头,文件名和文 件内容。3大流量:该格式被看作是字节流。第十一章同步111信号量特征头文件定义了sem_t类型,它用于信号量操作中。sem_t代 表了信号量,用文件描述符能够实现这些信号量,应用程序能够打开至少OPEN_MAX这么多的文件和信号量。标准中,头文件能使头文件和vfcntl.h中的符号可见。112信号量函数1初始化一个未命名的信号量函数原型:#inxludeint sem_init (sem_t *sem,i

50、nt pshared,unsigned int value);函数功能:如果匕POSIX_SEMAPHOR定义了 :该函数被用来初始化sem引用的未命名信号量。在成功调用该函数以后,在接下来的sem_wait(),sem_trywait(),sem_post(),sem_destroy()的调用中,该信号量将被用到。 如果参数pshared不为零, 信号量将在进程中被 共享,任何可以访问信号量sem的进程都可以使用sem只有sem能被用来进行 同步。如果参数pshared为零,则结构不确定。如果标准中未定义,可以由执行 者来支持该函数。2删除一个未命名信号量函数原型:#include int

51、sem_destroy(sem_t *sem);函数功能:如果 匕POSIX_SEMAPHOR定义了,该函数用来删除sem引用的未 命名信号量,只有在sem_init()中创建的信号量才能被该函数删除。3初始化/打开一个命名信号量函数原型:#include函数功能:如果匕POSIX_SEMAPHOR定义了,该函数在进程和命名信号量之间创建一个链接。接着调用带有信号量名name的该函数,进程引用与name相关的信号量。该信号量在一些函数的调用中用到,如sem_wait(),sem_trywait(),sem_post,和sem_close()。 信号量一直可用知道调 用函数sem_close()

52、,_exit,exec()关闭它。 参数oflag控制是否信号量由sem_open()创建或者仅被它访问。4关闭一个命名信号量函数原型:#includeint sem_close(sem_t *sem);函数功能:如果匕POSIX_SEMAPHORES义了,该函数用来提示调用进程 已经完成使用sem所指明的信号量。该函数释放系统资源,这些资源被拥有该信 号量的进程占有。5移走一个命名信号量函数原型:#includeint sem_unlink(const char *name);函数功能:该函数将移走被字符串n ame命名的信号量。如果该信号量当 前被其他进程引用, 则该函数对信号量状态没有影

53、响。 如果一个和更多的进程打 开了该信号量,则销毁该信号量被延迟知道所有的信号量被sem_close(),_exit(),exec关闭。6锁定一个信号量函数原型:#includeint sem_wait (sem_t*sem); int sem_trywait(sem_t *sem);函数功能:sem_wait()锁定sem引用的一个信号量,对该信号进行锁定操 作。如果信号量为“0”, 调用进程将不会返回直到锁定了这个信号量或者被一 个信号中断。Sem_trywait()只能在信号量当前没被锁定的情况下锁定它,否则 将不会锁定信号量。成功返回,信号量的状态将被锁定直到sem_post()被调用

54、 并且成功返回。7解锁一个信号量函数原型:#includeint sem_post(sem_t *sem);函数功能:该函数通过对一个信号量的解锁操作解锁一个被sem引用的信号量。如果该操作的结果, 信号量值为正数, 则没有进程被锁定来等待一个信号 量解锁,信号量值是单一的增加。 如果信号量值为“0”, 则进程被锁定来等待 一个信号量被允许从sem_wait()成功返回。8取得一个信号量值函数原型:#includeint sem_getvalue(sem_t *sem,int *sval);函数功能:该函数更新参数sval所引用的位置,在不改变信号量状态的 情况下得到信号量值。 更新的值代表了

55、一个确切的值, 它产生在调用中的一个不 定时刻,但它返回给调用进程是不一定需要信号量的确定值。如果sem被锁定,则sem_getvalue()返回的值为0,或者负数,它代表了等待信号量的进程数。第十二章 内存管理 该章节描述了进程内存锁定,内存映象文件,和共享内存工具。 内存锁定和内存映象文件以页的方式定义。 执行者可以据据页大小的规范限制和 排列锁定和映象范围。页的大小,以字节为单位,是一个可配置系统变量。默认 为1B。内存锁定保证了一部分地址空间的驻留。121内存锁定函数1锁定/解锁进程地址空间函数原型:#includeint mlockall(int flags);int munlock

56、all(void);函数功能:mlockall()使进程地址空间所映射的所有页面成为内存驻留 区,直到解锁或者进程退出或者execs另一个进程映象。 参数flags决定了是否 被锁定的页面是由当前,(将来,或者两者都是)的进程地址空间映射的。Munlockall()解锁当前所有的进程地址空间映射页面。 所有映射到进程地址空 间的页面,调用了该函数,将不会被锁定,除非有中断调用mlockall()确定MCL_CURREN或者并发调用mlockall()确定MCL_CURRENT2锁定/解锁一连续的地址空间 函数原型:#include int mlock(const void*addr,size_

57、t len); int munlock(const void *addr,size_t len);函数功能:mlock()使一个范围的进程地址空间成为内存驻留区(addr决定了空间的起始地址,len决定了空间长 度)直到解锁或者进程退出或者execs另一个进程映 象;munlock()解锁一个范围的进程地址空间(addr决定了空间的起始地址,len决定了空间长度);12.2内存映象函数1映象进程地址到一个内存目标 函数映象:#includevoid *mmap(void *addr,size_t len,int prot,int flags,int fildes,off_t off);函数功:

58、该函数在一个进程的地址空间和内存对象间创建一个映 射,调用格式如:pa=mmap(addr,len,prot,flags,fildes,off);pa代表进程进程地址空间的地址,由执行者定义(addr和flags),len表示空间长度,fildes代表内存对象,off表示偏移量。函数成功调用返回pa,空间地址范开始与pa,长度为连续的len个字节;内存对象开始与off, 长度为len字节。参数prot决定了读,写,执行,或一 些映射数据的访问活动的集合。2取消以前映射地址的映射关系函数原型:#includeint munmap(void *addr,size_t len);函数功能:该函数移去

59、任何包含有进程地址空间的页面的映射关系,该进程地址空间起始于addr,长度为len字节3改变内存保护函数原型:#include int mprotet(const void *addr,size_t len,int prot);函数功能:该函数更改访问的保护活动,由参数prot确定。访问对象是 一部分进程地址空间,起始于addr,长度为len字节。4内存对象同步函数原型:#inxludeint msync(void *addr,size_t len,int flags);函数功能: 该函数将所有更改了的数据写到拥有存储的地方, 它包含了进 程地址空间,起始于addr,长度为len字节。如果没有

60、这样的存储区域存在, 则给函数没有作用。 该函数须保证写操作的完成符合所定义的同步I/O数据的一 致完成性。参数flags确定了写的同步/异步性。123共享内存函数1打开一个共享内存对象函数原型:includeint shm_open(const *name,int oflag,mode_t mode);函数功能: 该函数在共享内存对象和文件描述符之间创建了一个连接。它创建了一个打开文件描述涉及到共享内存对象, 并且创建了一个文件描述符指向这 个打开文件描述。这个文件描述符可悲其他函数用来指向共享内存对象,参数name旨向共享内存对象名。如函数调用成功,则返回一个共享内存的文件。文 件状态和文

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论