1, fopen() 的使用,在linux环境下,我们可以使用man fopen查看使用说明:
#include <stdio.h>
FILE *fopen(const char *path, const char *mode);
path 是指文件路径。
mode 含义如下:
r 只读方式打开一个文本文件,流指向文件头
w 只写方式打开一个文本文件,流指向文件头。若文件存在,就清空内容
a 追加方式打开一个文本文件,流指向文件尾。若文件不存在,就新建一个
r+ 可读可写方式打开一个文本文件,流指向文件头
w+ 可读可写方式创建一个文本文件,流指向文件头。若文件存在,就清空内容。
a+ Open for reading and appending (writing at end of file)。可读可写打开一个文本文件,读文件时,流指向文件头;写文件时,流指向文件尾。
rb,wb,ab,rb+,wb+,ab+这6种方式和上述类似,只是打开的是2进制文件。
- 对于流的指向位置,可以通过fseek() 函数来设置。
#include int fseek(FILE *stream, long offset, int whence);
offset: 是指偏移字节数,单位是字节。
whence:偏移起始位置,参数如下:
文件头0(SEEK_SET) 当前位置1(SEEK_CUR), 文件尾2(SEEK_END)
- 函数名: fwrite
头文件:<stdio.h>
功 能: 写内容到流中,从指针ptr开始把n个数据项添加到给定输出流stream,每个数据项的长度为size个字节。
函数原型: int fwrite(void *ptr, int size, int nitems, FILE *stream);
参 数:void *ptr 要写入的内容
int size 要写入字符的长度
int nitems 要写入字符的数量
FILE *stream 要写入的文件流
返回值:成功 返回确切的数据项数(不是字节数),失败出错 返回短(short)计数值。可能是0
举例如下:
fseek(fp,-1L*sizeof(char),SEEK_END);
实列:
char *BB = "hello\n";
FILE *pFile;
pFile = fopen(FILE_PATH, "wb+");
if (!pFile)
{
printf("fopen file : %s failed \n", FILE_PATH);
return -1;
}
fwrite(BB, sizeof(BB), 1, pFile );
fflush(pFile ); // 刷新缓存区
fclose(pFile );
注: fflush()的作用是用来刷新缓冲区,fflush(stdin)刷新标准输入缓冲区,把输入缓冲区里的东西丢弃; fflush(stdout)刷新标准输出缓冲区,把输出缓冲区里的东西强制打印到标准输出设备上。
fflush(stdin)不太常用,在有些编译器中是错误的用法,可以用以下方法替代:while(getchar()!=’/n’);
fflush(stdout)在单进程程序中作用不大,但在多进程程序中很有用。程序的输出内容一般不会立即输出,而是在程序结束后再输出。fflush(stdout)会强制每次printf()都立即显示在标准输出设备上。