当前位置:嗨网首页>书籍在线阅读

04-C库文件操作

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

5.1.2 C库文件操作

C库函数的文件操作实际上是独立于具体的操作系统平台的,不管是在DOS、Windows、Linux还是在VxWorks中都是这些函数:

1.创建和打开

FILE fopen(const char path, const char *mode);

fopen()实现打开指定文件filename,其中的mode为打开模式,C库函数中支持的打开模式如表5.3所示。

表5.3 C库函数文件打开标志

| 标 志 | 含 义 | | :----- | :----- | :----- | :----- | | r、rb | 以只读方式打开 | | w、wb | 以只写方式打开。如果文件不存在,则创建该文件,否则文件被截断 | | a、ab | 以追加方式打开。如果文件不存在,则创建该文件 | | r+、r+b、rb+ | 以读写方式打开 | | w+、w+b、wh+ | 以读写方式打开。如果文件不存在时,创建新文件,否则文件被截断 | | a+、a+b、ab+ | 以读和追加方式打开。如果文件不存在,则创建新文件 |

其中b用于区分二进制文件和文本文件,这一点在DOS、Windows系统中是有区分的,但Linux不区分二进制文件和文本文件。

2.读写

C库函数支持以字符、字符串等为单位,支持按照某种格式进行文件的读写,这一组函数为:

int fgetc(FILE *stream);

int fputc(int c, FILE *stream);

char fgets(char s, int n, FILE *stream);

int fputs(const char s, FILE stream);

int fprintf(FILE stream, const char format, ...);

int fscanf (FILE stream, const char format, ...);

size_t fread(void ptr, size_t size, size_t n, FILE stream);

size_t fwrite (const void ptr, size_t size, size_t n, FILE stream);

fread()实现从流stream中读取加n个字段,每个字段为size字节,并将读取的字段放入ptr所指的字符数组中,返回实际已读取的字段数。在读取的字段数小于num时,可能是在函数调用时出现错误,也可能是读到文件的结尾。所以要通过调用feof()和ferror()来判断。

write()实现从缓冲区ptr所指的数组中把n个字段写到流stream中,每个字段长为size个字节,返回实际写入的字段数。

另外,C库函数还提供了读写过程中的定位能力,这些函数包括:

int fgetpos(FILE stream, fpos_t pos);

int fsetpos(FILE stream, const fpos_t pos);

int fseek(FILE *stream, long offset, int whence);

3.关闭

利用C库函数关闭文件依然是很简单的操作:

int fclose (FILE *stream);

例程:将第5.1.1节中的例程用C库函数来实现,如代码清单5-2所示。

代码清单5.2 Linux文件操作用户空间编程(使用C库函数)

1 #include <stdio.h>

2 #define LENGTH 100

3 main()

4 {

5 FILE *fd;

6 char str[LENGTH];

7

8 fd = fopen("hello.txt", "w+"); / 创建并打开文件 /

9 if (fd) {

10 fputs("Hello World", fd); / 写入字符串 /

11 fclose(fd);

12 }

13

14 fd = fopen("hello.txt", "r");

15 fgets(str, LENGTH, fd); / 读取文件内容 /

16 printf("%s\n", str);

17 fclose(fd);

18 }