文章目录
  1. 1.
  2. 2. 文件的指针
  3. 3. 文件的操作
    1. 3.1. 打开文件
  4. 4. perror

简·福斯特

在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函数就会返回空指针。这可能是

  1. 文件不存在
  2. 文件位置不对
  3. 没有打开文件的权限

perror

定义函数

1
2
3
#include <stdio.h>

void perror(const char *s);

perror ( )用 来 将 上 一 个 函 数 发 生 错 误 的 原 因 输 出 到 标 准 设备 (stderr) 。参数 s 所指的字符串会先打印出,后面再加上错误原因字符串。此错误原因依照全局变量error 的值来决定要输出的字符串。  

在库函数中有个error变量,每个error值对应着以字符串表示的错误类型。当你调用”某些”函数出错时,该函数已经重新设置了error的值。perror函数只是将你输入的一些信息和现在的error所对应的错误一起输出。

文章目录
  1. 1.
  2. 2. 文件的指针
  3. 3. 文件的操作
    1. 3.1. 打开文件
  4. 4. perror