FILE *fopen (const char *path, const char * mode)
path:要打开的文件路径名。
mode:打开方式,包括:r,r+,w,w+,a,a+,b。
- r:只读;
- r+:可读可写;
- w:只写,不存在则创建新文件;
- w+:可读可写,不存在则创建新文件;
- a:追加只写,总是将数据写入文件末尾,不存在则创建新文件;
- a+:追加可读可写,总是将数据写入文件末尾,不存在则创建新文件;
- b+:对文件进行二进制操作;
返回值:失败返回NULL,成功则返回文件留置针FILE*。
size_t fwrite (const void *ptr, const size_t size, size_t nmemb, FILE *stream)
ptr:要写入文件的数据的地址空间;
size:块大小;
nmemb:块个数;
stream:操作句柄—fopen返回的文件流指针;
返回值:成功返回实际写入文件的块个数,失败返回0;
size_t fread ( void *ptr, const size_t size, size_t nmemb, FILE *stream)
ptr:一块缓冲区内存空间的地址,用于存放读取的数据;
size:块大小;
nmemb:块个数;
stream:操作句柄—fopen返回的文件流指针;
返回值:成功返回读取到的完成块个数,出错返回0,读取到文件末尾返回0,读取的数据不足一块儿也返回0;
建议块大小为1,块个数为操作数据的长度,因为如果要读取50字节的长度,但只读取到40字节,返回值也会返回0,通过返回值无法确定是否已经读取到数据。
int fseek (FILE *stream, long offset, int whence )
stream:操作句柄—fopen返回的文件流指针;
offset:相对whence开始的偏移量(正数向前,负数向后)
whence:相对起点
- SEEK_SET : 文件起始位置;
- SEEK_CUR :文件当前读写位置;
- SEEK_END : 文件末尾位置;
返回值:成功返回0,失败返回-1;
int fclose (FILE *stream)
关闭文件,释放资源。
代码实现
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
int main ()
{
//打开文件
FILE* fp = fopen("text.txt", "w+");
if (fp == NULL)
{
perror ("open error");
return -1;
}
//写入文件
char *ptr = "hello world\n";
int ret = fwrite(ptr, strlen(ptr), 1, fp);
if(ret == 0)
{
perror("write error");
return -1;
}
//将读写位置便宜到文件起始位置
fseek(fp, 0, SEEK_SET);
//读取文件内容
char *buf[1024] = {0};
ret = fread(buf, 1, 1023, fp);
if(ret == 0)
{
printf("没有读取到数据\n");
}
printf("buf= %s --- ret= %d",buf, ret);
fclose(fp);
return 0;
}
文件内容