内容正文:
第11章文件
第11章文件
文件概述
文件的打开与关闭
以一个字节为单位读写文件
使用文本文件
以存储单元为单位读写文件
标准设备文件
文件的随机读写
标准设备文件
这节课我们学习标准设备文件。
3
设备文件
为方便使用,计算机中的硬件常被抽象成文件,这类文件称为设备文件。
“键盘”被抽象成以只读方式打开的文本文件,用户输入的数据通常会自动存入此文件中,读取文件的内容即可获得用户的输入。“显示器”是一个以只写方式打开的文本文件,存入此文件中的字符会自动出现在显示器上。
程序运行时一些设备文件自动打开,这些文件又称为标准设备文件。
为方便使用,计算机中的硬件常被抽象成文件,这类文件称为设备文件。
“键盘”被抽象成以只读方式打开的文本文件,用户输入的数据通常会自动存入此文件中,读取文件的内容即可获得用户的输入。“显示器”是一个以只写方式打开的文本文件,存入此文件中的字符会自动出现在显示器上。
程序运行时一些设备文件自动打开,这些文件又称为标准设备文件。
4
常用的标准设备文件
常用的标准设备文件有标准输入、标准输出和标准出错输出,对应的FILE型指针变量分别为stdin、stdout和stderr。
使用指针变量stdin、stdout和stderr指向的标准设备文件时,无须打开文件和关闭文件。
标准输入文件默认与键盘相连,是一个以只读方式打开的文本文件,用户由键盘输入的数据通常会自动存储在此文件中。
标准输入文件就是所谓的“输入缓冲区”。
常用的标准设备文件有标准输入、标准输出和标准出错输出,对应的FILE型指针变量分别为stdin、stdout和stderr。
使用指针变量stdin、stdout和stderr指向的标准设备文件时,无须打开文件和关闭文件。
标准输入文件默认与键盘相连,是一个以只读方式打开的文本文件,用户由键盘输入的数据通常会自动存储在此文件中。
标准输入文件就是所谓的“输入缓冲区”。
5
标准输入文件和标准输出文件
scanf函数通过访问标准输入文件以获得用户输入的数据,当文件中没有数据时,程序就会暂停运行以等待用户的输入。
scanf("%hd", &i);可替换为fscanf(stdin, "%hd", &i);。
标准输出文件默认与显示器相连,是一个以只写方式打开的文本文件,写入文件的数据会自动出现在程序运行窗口。
printf("%hd", i);可替换为fprintf(stdout, "%hd", i);。
scanf函数通过访问标准输入文件以获得用户输入的数据,当文件中没有数据时,程序就会暂停运行以等待用户的输入。
scanf("%hd", &i);可替换为fscanf(stdin, "%hd", &i);。
标准输出文件默认与显示器相连,是一个以只写方式打开的文本文件,写入文件的数据会自动出现在程序运行窗口。
printf("%hd", i);可替换为fprintf(stdout, "%hd", i);。
6
标准出错输出文件(stderr)
标准出错输出文件用于记录程序中的错误信息,默认也与显示器相连,也是一个以只写方式打开的文本文件。
标准出错输出文件用于记录程序中的错误信息,默认也与显示器相连,也是一个以只写方式打开的文本文件。
标准设备文件测试程序如图所示。
7
思考题
标准输入文件中没有数据时,程序会暂停运行以等待用户的输入,也就是说,标准输入文件不会处于结束状态?
使用Windows操作系统时,按下ctrl+z键(同时按ctrl键和z字符键)可以使标准输入设备文件(stdin)处于结束状态,但只有程序暂停运行等待用户输入数据时,直接按下ctrl+z键才起作用。
以存储单元为单位读写文件
这节课我们学习以存储单元为单位读写文件
9
fwrite函数
首部为size_t fwrite (void* buffer, size_t size, size_t count, FILE *stream)
size_t是无符号整型的别名,在stdio.h中的定义。
fwrite函数把buffer指向的大小为size*count个字节的存储空间的内容写入stream指向的文件中,并返回已成功写入的大小为size的存储单元的个数。
fwrite函数实际上是把count个大小为size的存储单元写入到文件中。
stream指向的文件应以二进制写入方式打开,即wb模式打开。
fwrite函数的首部为size_t fwrite (void* buffer, size_t size, size_t count, FILE *stream)
size_t是无符号整型的别名,在stdio.h中的定义。
fwrite函数把buffer指向的大小为size*count个字节的存储空间的内容写入stream指向的文件中