POSIX标准理解_第1页
POSIX标准理解_第2页
POSIX标准理解_第3页
POSIX标准理解_第4页
POSIX标准理解_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

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

文档简介

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

2、中基于编程语言的核心需求部分所定义; 另一部分包含了一个特殊语言服务的标准接口。 基于任何语言, 与该标准一致的执行都必须遵循语言规范的任何4丑章节。该标准一共被分为四个部分:( 1)陈述的范围和一系列标准参考(第一章);( 2)定义和总概念;(第二章)( 3)各种接口设备;(第三章到第九章,第十一章到第十五章)( 4)数据交换格式;(第十章)该标准的主要目的有:( 1)面向应用( 2)定义接口,而不是它的具体实现;( 3)涉及资源和可移植性,而非对象;( 4)基于c 语言;( 5)无超级用户,无系统管理;( 6)最小限度的接口,最小限度的定义;( 7)应用领域广泛;( 8)对以前的实现进行最

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

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

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

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

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

8、t 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 *path, const *char argv, char *const envp) ?int execlp(const char *file, const char *arg.);?int execvp(const char *file, char *const argv)

9、;函数功能: exec 系列的函数用一个新的进程映像替代了当前的进程映像, 这个新的进程映像创建于一个规则的, 可执行文件, 叫做新进程映像文件。执行成功无返回值因为调用进程映像以为新的进程映像所覆盖。3.2?进程的终止进程的终止有两种情况:(1)从main()函数返回时或者执行exit()或_exit()函数时正常的终止;(2)被abort()函数请求或者接受到一些信号时不正常的终止;1 .等待进程终止?函数原型:#include#include pid_t wait(int *stat_loc); pid_t waitpid(pid_t pid,int *stat_ opti

10、ons);?函数功能:wait ()和waitpid ()允许调用进程获得它的一个子进程的状态 信息。Wait()函数将挂起调用进程直到获得了它的子进程的状态信息,或者是直到获得一个终止进程信号;如果 pid = 1并且options=0 , waitpid()函数功能 将和waitpid()相同,否则它的功能将依据 pid和options的值而改变。2 .?终止一个进程?函数原型:void_exit(int status);?函数功能:_exit()函数将终止一个调用进程,该函数不能返回给其调用者3.3?信号在头文件终声明了 sigset_t类型和sigaction 结构。完成所定义的 信号

11、分三类:必需的信号;任务控制信号;内存保护信号,分别如下表:必需信号货号常量施述SIGABRT非正常终止信号SIGALRM超时信号SIGFPE错误运算操作SIGHUP为控制中断所检测到的挂断SIGILL无效硬件信号的检测SIGINT交互式信号SIGKILL终止信号SIGPIPE写心SIGQUIT交互式终止信号SIGSEGV无效内存引用检测信号|SIGTERM终止信号SIGUSR1保留心SIGUSR2保留信号作业控制信号符号常量描述SIGCHLD子进程终止或停止SIGCONT停止后继续SIGSTOP停止信号SIGTSTP交互式的停止信号SIGTTIN从控制终端读SIGTTOU写到控制终端内存保护

12、信号符号常量描述SIGBUS状取内存中不确定的部分每一个进程有一个进程标记(process mask),它定义了一组产生但被阻塞传递的信号集。 Sigaction () , sigpromask () , sigsuspend ()函数控制这个进程标记的行为。1 .送一个信号到进程函数原型:#include ?#include?int kill(pid_t pid, int sig)函数功能:该函数发送一个信号到一个由pid指明的进程或者进程组,sig标志了信号类型,其值是0或者上表中的值。如果发送成功,返回0,否则返回1。2 .?操纵信号集?函数原型:#include int sigempt

13、yset(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 .?检测和更改信号的行为?函数原型: #include?int sigaction(int sig,con

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

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

16、#include?int 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

17、*timeout );?函数功能:该函数从参数set 所确定的信号集中选择一个未定的信号出来。如果该函数成功,返回一个信号数;否则返回 1。8 .?排队一个信号到进程?函数原型:#include?int sigqueue(pid_t pid,int signo, const union sigval value);?函数功能:该函数功能是使由signo 确定的信号将参数value 所确定的值发送到由 pid 指明的进程中去。9 .4?定时器操作1调度警报?函数原型:unsigned int alarm(unsigned int seconds);?函数功能:当参数seconds 指定的一段实时

18、时间过去后,该函数将发送一个SIGALRM&号到调用进程。10 ?挂起进程的执行?函数原型:int pause(void);?函数功能:该函数挂起一个调用进程直到得到一个信号,这个信号或者执行信号跟踪功能或者是终止该进程。 如果是终止进程, 该函数不返回; 如果是执行信号跟踪功能,则该函数在信号跟踪函数返回后也要返回。11 ?延迟进程的执行?函数原型:unsigned int sleep(unsigned int seconds);seconds?函数功能:该函数使当前进程从执行状态转化为挂起状态,直到参数所指定的一段实时时间过去后, 或者是一个唤醒信号跟踪功能或终止进程功能的信号到来。该挂起

19、时间由于系统的其他调度活动可能会比要求的时间长。第四章进程环境4.1 ?进程标志符1. 获得进程和父进程的 ID?函数原型: #includepid_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 (

20、)返回调用进程的真实用户 ID, geteuid() 返回调用进程的有效用户 ID , getgid ()返回调用进程的真实组 ID , getegid ()返回调用进程的有效组的 ID 。2 .?设置用户和组的 ID?函数原型: #include?int setuid(uid_t uid);?int setgid(gid_t gid);?函数功能:这两个函数分别根据进程的权限设置真实用户ID, 有效用户 ID ,真实组 ID ,有效组 ID。3 .?获得辅助组 ID?函数原型: # include?int getgroups(int gidsetsize.gid_t grouplist);?

21、函数功能:该函数在队列的组列表中填入调用进程的辅助组ID 。 参数 grouplist确定了组列表中的元素个数。4 .?获得用户名?函数原型:char *getlogin(void)?函数功能:该函数返回一个指针,指向与调用进程相关的用户名。4.3 ?进程组1 . 获得进程组ID?函数原型:#includepid_t getpgrp(void);?函数功能:该函数返回调用进程的进程组ID 。2 .?创建会议并且设置进程组 ID?函数原型:#includepid_t setsid(void)?函数功能:如果调用进程不是进程组的引导者, 则该函数将创建一个新的会议。该调用进程应该为新会议的会议引导

22、者, 应该为新进程组的引导, 应该没有控制终端。进程组的 ID 应该等于该调用进程的 ID 。3 .? 为作业控制设置进程组 ID?函数原型:#include?int setpgid(pid_t pid,pid_t pgid);?函数功能:如_POSIX_JOB_CONTROL定义,则该函数用来加入已经存在的进 程组或者创建一个新的进程组。4.4 ? 系统标志1. 获得系统名?函数原型:#includeint uname(struct utsname *name);?函数功能:该函数存储了鉴别当前操作系统的信息。4.5 ? 时间?1 得到系统时间函数原型:#include?time_t tim

23、e(time_t *tloc);函数功能:该函数返回自从一时间点以来的某个时间值,以秒为单位。 参数 tloc指向一个时间值所存储的地方。2.?获得进程时间?函数原型:#includeclock_t times(struct time *buffer);?函数功能:参数buffer 指向一个结构,该函数向该结构填写有关时间的信息。Clock_t 和 tms 结构在 中定义。4 6?环境变量1. 获取环境?函数原型:#includechar *getenv(const char *name);?函数功能:该函数在环境列表查找字符串 name=value, 返回指向 value 的指针。如果没有找

24、到,则返回 null 。4.7?终端标志1产生终端路径?函数原型:#include?char Ictermid(char *s);?函数功能:该函数产生一个字符串,作为路径名,提交到当前进程的当前控制终端。2确定终端设备名?函数原型:char *ttyname(int fildes);?int isatty(int fildes);?函数功能:ttyname ()返回一个指针指向一个字符串,它包含了与文件描述符fildes 相关的终端名;如果fildes 是一个有效的与终端联系的文件描述符,isatty ()返回“1”,否则返回“0”。4 8?可配置的系统变量1获得可配置的系统变量?函数原型:

25、#includelong sysconf(int name);?函数功能:该函数提供了一个应用方法来决定可配置系统变量的当前值。参数name弋表了所查询的系统变量。第五章文件和目录5 1?目录1目录的入口形式?头文件 定义了一个结构和目录程序用到的类型, 没有确定的文件内部格式。 Readdir() 返回了一个指针指向一个类型对象struct dirent 。2目录操作?函数原型:#include#includedir *opendir(const char *dirname);struct dirent *readdir(dir *dirp);void rewinddir(dir *dirp

26、);int closedir(dir *dirp);?函数功能:opendir()根据参数dirname打开一个目录流;readdir ()返回一个指针,它指向一个目录流中当前位置的目录入口,目录流由参数dirp 指向;rewinddir ()重置目录流的位置到目录的起点; closedir ()关闭目录流,如成功,则返回“0”值。5 2?工作目录?1?改变当前的工作目录?函数原型:int chdir(const char *path);?函数功能:path 指向目录的路径名。该函数使命名的目录成为当前的工作目录。?2?获得工作目录路径名?函数原型:char *getcwd(char *buf

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

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

29、, 它命名了一个创建的新的目录入口。 该函数为已存在的文件自动的创建一个新的连接,并且将文件连接数加 1。5 4?特殊文件创建?1?生成一个目录?函数原型:#include?#include?int mkdir(const char *path,mode_t mode);?函数功能:该函数依据参数path 创建一个新的目录。新目录的允许位根据mode始化。?2?创建一个FIFO类型的文件?函数原型:#include?#includesys/stat.h?int mkfifo(const char *path,mode_t mode);?函数功能:mkfifo ()创建一个新的 fifo 类型文

30、件,它由 path 指向的路径名命名。5 5?文件的移动?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指向文件的新路径名。5 6?文件特征5 7?可配置路径名变量第六章输

31、入与输出源语6 1?管道?1?创建内进程通道?函数原型:int pipe(int filedw2);?函数功能:该函数创建一个管道并且创建两个文件描述符,一个是fildes0, 一个是fildes1, 它们分别指的是读与写的管道端。6. 2?文件描述符控制? 1?复制一个打开文件描述符?函数原型:int dup(int fildes);?int dup2(int fileds,int fileds2);?函数功能:这两个函数为fcntl ()服务提供了两个选择的接口,用到了F_DUPF 命令。6. 3?撤除文件描述符?1?关闭一个文件?函数原型:int close (int fildes);?

32、函数功能6. 4?输入和输出?1?文件读?函数原型:ssize_t read(int fildes,void *buf,size_t nbyte);?函数功能:?2?文件写函数原型:ssize_t write(int fildes,const void *buf,size_t nbyte);函数功能:6. 5?一个文件的控制操作?1?文件控制操作的数据定义?头文件fcnt1.h为fcntl ()和open ()定义了一下的要求和参数:?fcntl ()的_cmd值常量描述F_DUPFDF_GETFDF_GETLKF_SETFDF_GETTFLF_SETFLF_SETLKF_SETLKW?2?文

33、件控制?函数原型:#clude ?#clued ?#include?int fcntl(int fildes,int cnd,);?函数功能:fcntl()为打开的文件提供了一系列控制,参数fildes是一个文 件描述符。Cmdfe定了控制的内容。?3?读/写文件偏移量的重新定位?函数原型:#include?#include?off_t lseek(int fildes,off_t offset,int whence);?函数功能:Iseek ()为fildes 所指定的文件重新设置偏移量。6. 6?文件同步?1?文件的状态同步?函数原型:#include ?int fsync(int fil

34、des);?函数功能:该函数用来暗示所有的文件描述数据被传输到了存储设备上。?2?文件数据的同步函数原型:#include?int fdatasync(int fildes);?函数功能:该函数迫使当前所有排队的I/O操作进入同步?I/O状态。6 7?异步输入与输出?1?异步输入与输出的数据定义?头文件 有5 , , ft 中的 符号可见。 ?异步I/O控制块异步 I/O 控制块结构aiocb 在许多异步 I/O 接口中使用,它在 中定义。主要常量?2?异步读?函数原型:#include?int aio_read (struct aiocb *aiocbp);?函数功能:aiocbp-io_n

35、bytes,表示读的字节数; aiocbp-aio_fildes ,表示读的文件;aiocbp-aio_buf,表示读到的缓冲区。?3?异步写?函数原型: #include?int aio_write(struct aiocb *aiocbp);?函数功能:参数表示同上。?4?列出直接I/O?函数原型:#include?int lio_listio(int mode,struct aiocb *const list,int nent,struct sigevent *sig);?函数功能:该函数允许用一个函数调用初始化一个I/O 请求列表。?5?得到异步I/O 操作的错误状态函数原型: #in

36、clude?int aio_error(const struct aiocb *aiocbp);函数功能:该函数返回 aiocbp 指向的结构所表示的错误状态。?6?得到异步I/O 操作的返回状态函数原型: #include? ssize_t aio_return(struct aiocb *aiocbp);函数功能:?7?删除异步I/O 请求函数原型:#include?int aio_cancel (int fildes,struct aiocb *aiocbp);函数功能:参数 fildes 是文件描述符,参数 aiocbp 指向异步 I/O 控制块上的请求删除部分。?8?等待异步I/O

37、请求函数原型: #include?int aio_suspend(const struct aiocb *const list,int nent,conststruct timespec *timeout);函数功能:标准定义该函数挂起调用进程直到至少一个list 指向的异步 I/O 操作完成,或者一个信号中断了一个函数,或者超时了( timeout 指定)。?9?异步文件同步化函数原型: #include?int aio_fsync(int op,struct aiocb *aiocbp);函数功能:该函数迫使所有与(参数aiocbp 指向的)结构aiocb 中 aio_fildes所指定的

38、文件相关异步 I/O 操作进入同步状态。?第七章设备和面向类的函数7 1?基本的终端接口?1?接口特性当一个终端文件被打开,通常它将引起进程等待直到连接被建立。进程组一个终端可以具有与它相关的前台进程组,它发挥特定的角色,后面会讲到。控制终端终端存取控制输入操作和读进程规范的输入操作非规范模式的输入操作写数据和输出处理特殊的符号(INTR,QUIT,ERASE,KILL) modenK掉连接关闭终端设备文件?2?可设置的参数? termios 机构?伍结构在termios.h中定义,在控制特定的终端I/O特性中要用到 ? 输入模式? ?termios c_iflap 值域标记名?的述BRKIN

39、T信号中断ICRNL?*俞入时将CR射至U NLIGNBRK忽略中断状态IGNCR?Q各 CRIGNPAR忽略奇偶错误INLCR输入时将NL映射到CRINPCK输入奇偶校验使能ISTRIPStrip字符IXOFF?始/停止输入控制使能IXON?始/停止输出控制使能PARMRK?/ 生奇偶错误?输出模式?控制模式标记名描述CLOCAL?MH各 modemSi1CREAD?我 受使能CSIZE?的个字节的位数CS55位CS66位CS77位CS8?8 位CSTOPB?发送一个或两个停止位HUPCL?在最后的关闭中挂起PARENB?校验使能PARODD奇校验或偶校验本地模式termios c_lfla

40、g? 值标记名描述ECHO响应使能ECHOE响应ETASEECHOK响应KILLECHONL响应/n ICANON规范输入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)

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

42、t termios * termios_p);?函数功能:tcgetattr ()获得 fildes 所确定的文件的参数并将其存储在t erops_p 所指向的结构中; tcsetattr ()将设置参数。?2?行控制函数?函数原型:#include?int tcsendbreak(int fildes,int duration);?int tcdrain(int fildes);?int tcflush(int fildes,int queue_selector);?int tcflow(int fildes,int action)?函数功能:如果终端使用异步连续数据传输,tcsendbre

43、ak ()引起在一段时间内连续的 0位传输; tcdrain ()等待直到输出传输完毕; tcflush ()和tcflow ()是溢出的相关处理。(参考第 212 页)?3 取得前台进程组的 ID?函数原型:#include?pid_t tgetpgrp(int fildes);?功能:?4?设置前台进程组ID?函数原型:#include?int tcsetpgrp(int fildes,pid_t pgrp_id);?功能:如果进程支持控制终端,该函数设置与终端相关的前台进程组ID 到pgrp_id 。第八章基于C语言的服务7.1 ?参考的C语言规范?1?时间函数的扩展?2 setloca

44、le ()函数的扩展?函数原型:#includechar *setlocale(int category,const char *locale);?函数功能:该函数根据参数category 和 locale 设置,更改或者查询进程现场。8. 2?C语言输入/输出函数?1?映射一个流指针到一个文件描述符?函数原型:#include?函数功能:该函数返回一个与流相关的整型文件描述符。?2?根据一个文件描述符打开一个流?函数原型:#include?FILE *fdopen(int fildes,const char *type);?函数功能:该函数联合一个流和一个文件描述符。?3?其他文件类型函数之

45、间的相互作用?一个单一的文件描述说明可以通过流和文件描述符访问,流或者是文件描述符被称作位打开文件的句柄,一个打开文件说明可以有多个句柄。句柄可以在不影响重要的打开文件说明的情况下被创建和删除,创建如 fcntl().dup(),fdopen(),fileno(),fork();删除如 fclose(),close() 。( 1) fopen ()随着open ()的调用分配描述符,基础函数为open()。( 2) fclose ():该函数完成在与FILE 流相关的,对文件描述符的 close ()功能。( 3) freopen ():具有fclose ()和 fopen ()的特点。( 4

46、) 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(),printf(),fprintf():从以上任一个函数的成功执行到下一个调用(在同一个流中的 fflush

47、 ()或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 ()。执行fflush

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

49、)宏的定义一致,如果参数savemask不为“0,sigsetjmp ()就要保存当前的信号标记作为调用环境的一部分。 Siglongjmp ()同理。?2?设置时间域函数原型: #include?void tzset(void);函数功能:该函数用环境变量TZ 的值来设定时间变化信息。第九章系统数据库9 1?系统数据库?本章描述了两个数据库:组数据库和用户数据库。?组数据库包括的信息有:组名,组的数字ID, 组中的用户列表;?用户数据库包含的信息有:用户名,用户的数字ID ,组的数字 ID, 初始化的工作目录,和初始化的用户程序。10 2?数据库的访问?1?组数据库的访问?函数原型:#include?#include?struct gr

温馨提示

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

评论

0/150

提交评论