打开函数 fopen 的原型如下。
FILE * fopen(char *filename, char *mode);
返回值:打开成功,返回该文件对应的 FILE 类型的指针;打开失败,返回 NULL。
模式 | 含 义 | 说 明 |
---|---|---|
r | 只读 | 文件必须存在,否则打开失败 |
w | 只写 | 若文件存在,则清除原文件内容后写入;否则,新建文件后写入 |
a | 追加只写 | 若文件存在,则位置指针移到文件末尾,在文件尾部追加写人,故该方式不 删除原文件数据;若文件不存在,则打开失败 |
r+ | 读写 | 文件必须存在。在只读 r 的基础上加 '+' 表示增加可写的功能。下同 |
w+ | 读写 | 新建一个文件,先向该文件中写人数据,然后可从该文件中读取数据 |
a+ | 读写 | 在” a”模式的基础上,增加可读功能 |
rb | 二进制读 | 功能同模式”r”,区别:b表示以二进制模式打开。下同 |
wb | 二进制写 | 功能同模式“w”。二进制模式 |
ab | 二进制追加 | 功能同模式”a”。二进制模式 |
rb+ | 二进制读写 | 功能同模式"r+”。二进制模式 |
wb+ | 二进制读写 | 功能同模式”w+”。二进制模式 |
ab+ | 二进制读写 | 功能同模式”a+”。二进制模式 |
关闭函数 fclose 的原型如下。
int fclose(FILE *fp); // 函数参数:fp:已打开的文件指针。
返回值:正常关闭,返回否则返回 EOF(-1)。
文件格式化输出函数 fprintf 的函数原型为:所在头文件:<stdio.h>
int fprintf (文件指针,格式控制串,输出表列);
函数功能:把输出表列中的数据按照指定的格式输出到文件中。
返回值:输出成功,返回输出的字符数;输出失败,返回一负数
#include <stdio.h> #define SUCCESS 1 #define FAIL 0 #define FILE_PARH "/root/Desktop/data/new/" #define FILE_NAME FILE_PARH "test.text" int writFile() { FILE *fp; fp = fopen(FILE_NAME, "w+"); if (!fp) { return FAIL; } fprintf(fp,"this is a test %s\n","- OK"); fclose(fp); return SUCCESS; } int main(int argc, char* argv[]) { int iRes = SUCCESS; iRes = writFile(); return iRes; } 运行结果: [root@192 new]# cat ./test.text this is a test - OK
C 语言程序中常使用 fseek 函数移动文件读写位置指针
int fseek(FI:LE *fp, long offset, int origin);
函数功能:把文件读写指针调整到从 origin 基点开始偏移 offset 处,即把文件读写指针移动到 origin+offset 处。
基准位置 origin 有三种常量取值:SEEK_SET、SEEK_CUR 和 SEEK_END,取值依次为 0,1,2。
SEEK_SET:文件开头,即第一个有效数据的起始位置。
SEEK_CUR:当前位置。
SEEK_END:文件结尾,即最后一个有效数据之后的位置。
#include <stdio.h> #define SUCCESS 1 #define FAIL 0 #define FILE_PARH "/root/Desktop/data/new/" #define FILE_NAME FILE_PARH "a.text" int writeBeginFile() { int iRes = SUCCESS; FILE *fp; fp = fopen(FILE_NAME, "w+"); if (!fp) { return FAIL; } fprintf(fp,"this is a test content %s\n","- OK"); fprintf(fp,"this is a test content %s\n","- OK"); fseek(fp, 0, SEEK_SET); //文件头 fprintf(fp, "%s\n", "This the file begin"); fseek(fp, 0, SEEK_END); //文件尾 fprintf(fp, "%s\n", "This the file end"); fclose(fp); return iRes; } int main(int argc, char* argv[]) { int iRes = SUCCESS; iRes = writeBeginFile(); return iRes; }
运行结果:
[root@192 new]# cat a.text
This the file begin
nt - OK
this is a test content - OK
This the file end