C语言:输入-输出
总阅读次
流
在C语言中术语流*(stream)表述任意输入的源或任意输出的目的地。许多小程序都是通过一个流(通常和键盘相关)获得全部输入,并且通过一个流(通常和屏幕相关)*写出全部输出.
较大规模的程序可能需要额外的流。这些流通常表示存储在不同介质(如硬盘驱动器、CD、DVD和内存)上的文件,但也通常很容易和不存储的设备日(网络端口、打印机等)相关联。
文件的指针
C程序对流的访问是通过文件指针file pointer。此指针的类型是FILE *
FILE类型在<stdio.h>中声明。
用文件指针表示的特定流具有标准的名字;如果需要还可以声明另外一些指针看,例如,如果程序除了标准流之外的还需要2个流,则可以包含如下声明:
FILE *fp1,*fp2;
虽然操作系统通常会限制可以同时打开流的数量,但程序可以声明任意数量的FILE *类型变量。
文件的操作
打开文件
FILE *fopen(const char * restrict filename,const char * restrict mode);
fopen函数的第一个参数是含有要打开文件名的字符串。*(“文件名”可能包含关于文件位置的信息,如驱动器符或路径)*
第2个参数是“模式字符串”,它用来指定打算对文件执行的操作。例如,字符串
r
表明只读取数据。注意fopen函数原型中,restrict关键字出现了2次。restrict表明filename和mode所执行的字符串的内存单元不共享。
fopen
函数返回一个文件指针。程序可以把此指针存储在一个变量中,稍后需要对文件进行操作时使用它。
用于文本模式字符串
字符串 | 含义 |
---|---|
r |
只读 |
w |
写(文件不需要存在) |
a |
打开文件用于追加(文件不需要存在) |
r+ |
打开文件用于读和写(从文件头开始) |
w+ |
打开文件用于读和写(如果文件存在就截去) |
a+ |
打算开文件用于读和写(如果文件存在就追加) |
fopen
调用格式如下所示:fp=fopen("in.dat","r"); /*opens in.dat for reading*/
其中fp是FILE*类型的变量;
当程序稍后调用输入函数从文件in.dat
中读数据时,将会把fp当作一个实际参数。
当无法打开文件时,foopen函数就会返回空指针。这可能是
- 文件不存在
- 文件位置不对
- 没有打开文件的权限
perror
定义函数
1 |
|
perror ( )用 来 将 上 一 个 函 数 发 生 错 误 的 原 因 输 出 到 标 准 设备 (stderr) 。参数 s 所指的字符串会先打印出,后面再加上错误原因字符串。此错误原因依照全局变量error 的值来决定要输出的字符串。
在库函数中有个error变量,每个error值对应着以字符串表示的错误类型。当你调用”某些”函数出错时,该函数已经重新设置了error的值。perror函数只是将你输入的一些信息和现在的error所对应的错误一起输出。