零点起飞学Linux-C之标准输入输出.pptxVIP

  • 1
  • 0
  • 约8.78千字
  • 约 28页
  • 2024-04-09 发布于四川
  • 举报

第9章标准输入输出输入输出是指基于标准输入输出库实现的系统调用。由于用户经常需要进行这方面开发,系统提供了丰富的函数,并封装成库。使用该库,可以解决大部分输入输出问题。本章将详细讲解标准输入输出的基本操作、非格式化输入输出和格式化输入输出。

9.1标准输入输出的基本操作与上一章中介绍的输入输出函数不同,标准输入输出操作是通过文件控制结构FILE进行的。文件控制结构中包含处理文件所需的全部信息,例如文件名、文件当前的读写位置、用于该文件读写的内存缓冲区位置等。打开文件时,系统会在内存中自动建立该文件的控制结构。关闭文件时,文件控制结构被释放。在对文件进行操作之前,要首先获取文件的指针,即指向文件控制结构的指针,后续操作都通过该指针进行。

9.1.1打开文件操作文件之前要打开文件,打开文件的函数为fopen,其一般形式为:FILE*fopen(constchar*filename,constchar*modes);其中,filename表示要打开的文件名,可以是文件名字符串的首地址,也可以是双引号引起来的文件名字符串;modes表示打开方式,取值如表所示。参数说明r只读,文件必须已存在w只写,如果文件不存在则创建新文件,如果文件已存在则替换文件原有内容a在文件末尾追加,如果文件不存在则创建新文件r+读和写,文件必须已存在w+读和写,如果文件不存在则创建新文件,如果文件已存在则替换文件原有内容a+读和追加,如果文件不存在则创建新文件

9.1.1打开文件如果文件成功打开,则fopen函数返回一个文件指针;如果文件不存在或由于其他原因而没有成功打开,则返回NULL,并将错误码存在errno之中。errno是一个整型变量,后面将会详细介绍。例如打开当前目录下的hello.c文件。FILE*fp;fp=fopen(./hello.c,r);上面的代码中首先定义了一个文件指针,然后以只读方式打开文件。如果文件打开成功,文件的指针存在变量fp之中。

9.1.2关闭文件对文件操作完成后,应该关闭文件,这样可以释放所占用的资源。关闭文件的函数为fclose,其一般形式为:intfclose(FILE*fp);其中,参数fp为要关闭文件的指针。如果文件成功关闭,则fclose函数返回0。在该函数返回前,系统会将缓冲区内的数据全部写入文件中;如果文件关闭时出错,如传给它的为一个无效文件指针,则返回EOF,并将错误码存在errno之中。EOF的定义在头文件stdio.h之中,如下所示:132/*Endoffilecharacter.133Somethingsthroughoutthelibraryrelyonthisbeing-1.*/134#ifndefEOF135#defineEOF(-1)136#endif注意:132表示该代码在stdio.h中的位置。可以看到,EOF的值为-1。【实例9-1】下面编写一个程序,来说明文件打开与关闭函数的使用方法。(example1.c)

9.1.3清空缓冲区刷新缓冲区用于将缓冲区中的数据清除,Linux提供fflush和fpurge来完成该工作,他们的一般形式为:intfflush(FILE*fp);intfpurge(FILE*fp);fflush函数将缓冲区中的数据写入到磁盘文件或输出到用户终端,同时清空缓冲区;fpurge函数将缓冲区中的数据直接清除,包括尚未读取或写入的数据。

9.1.4设置缓冲区属性根据缓冲区操作时机,缓冲区的类型有下面三种:全缓冲:缓冲区被填满后才执行输入输出操作,将数据写入到磁盘文件或输出到用户终端;行缓冲:缓冲区中填入换行符时,执行输入输出操作;无缓冲:不对数据进行缓存,标准错误输出stderr一般就是无缓冲的,这可以使错误信息尽快地显示出来。缓冲区的大小和类型等都可以通过函数来设置。打开文件后,用户可以使用下面的函数来设置自己的文件缓冲区,而不使用fopen函数打开文件设定的默认缓冲区。

9.1.4设置缓冲区属性intsetvbuf(FILE*fp,char*buf,intmode,size_tsize);其中,参数fp指向已经打开的文件;buf为用户设定的缓冲区;mode为缓冲区的类型,可以取为_IOFBF、_IOLBF或_IONBF,分别表示全缓冲、行缓冲或无缓冲;size为缓冲区的大小。除setvbuf函数外,还有如下三个函数:intsetbuf(FILE*fp,char*buf);intsetbuffer(FILE*fp,char*buf,size_tsize);intsetlinebuf(FILE*fp);se

文档评论(0)

1亿VIP精品文档

相关文档