函数原型:
向文件fp中写入writeBuff里面的内容
int fwrite(void*buffer,intsize,intcount,FILE*fp)
/*
* @description :
对已打开的流进行写入数据块
* @param ‐ ptr
:指向 数据块的指针
* @param ‐ size
:指定写入的每个数据项的字节数,如调用
sizeof(char)
* @param ‐ nmemb :
指定写入的数据项的个数
* @param ‐ stream
:要写入的文件流
* @return : fwrite函数返回实际写入的数据项的个数
*/
fread()
──
从
fp
所指向文件的当前位置开始,一次读入
size
个字节,重复
count
次,并将读入的数据存放到从buffer
开始的内存中;
buffer
是存放读入数据的起始地址(即存放何处)。
fwrite()
──
从
buffer
开始,一次输出
size
个字节,重复
count
次,并将输出的数据存放到
fp
所指向的文件 中。buffer
是要输出数据在 内存中的起始地址(即从何处开始输出)。
一般用于二进制文件的处理。
#include<stdio.h>
#include<string.h>
int main()
{
FILE *fp = NULL;
int nRet = 0 ;
char readBuff[12];
char *writeBuff="hello world";/*在指针数组里面存放hello world*/
memset(readBuff,0,12);
fp =fopen("ll","r+");/*r+为对文件可读可写,且从光标后面开始写*/
if (fp == NULL)
{
printf("open failed!\n");
return -1;
}
printf("open success!\n");
nRet =fread(readBuff,4,2,fp);
if(nRet<=0)
{
printf("readBuff failed!");
return -3;
}
printf("readBuff is %s",readBuff);
nRet = fwrite(writeBuff,4,1,fp);/*从writeBuff里面取四个字节,数量为1写入到fp文件里面取*/
if(nRet<=0)
{
printf("write failed!");
return -4;
}
nRet = fclose(fp);
if(nRet)
{
printf("close failed!\n");
return -2;
}
printf("close success!\n");
return 0;
}
ll文件夹数据为123456789
cat ll命令为显示ll文件里面的内容。
上面代码的流程:
首先从ll文件夹里面读取8个字节到readBuff,所以readBuff里面的内容为12345678
然后将writeBuff里面的内容hello world写出4个字节到文件ll.
因为上次读完ll的8个字节后,光标位于8因此从8开始写入4个字节为12345678hell
#include<stdio.h>
#include<string.h>
int main()
{
FILE *fp = NULL;
int nRet = 0 ;
char readBuff[12];
char *writeBuff="hello world";
memset(readBuff,0,12);
fp =fopen("ll","r+");
if (fp == NULL)
{
printf("open failed!\n");
return -1;
}
printf("open success!\n");
nRet =fread(readBuff,4,1,fp);
if(nRet<=0)
{
printf("readBuff failed!");
return -3;
}
printf("readBuff is %s",readBuff);
nRet = fwrite(writeBuff,4,1,fp);
if(nRet<=0)
{
printf("write failed!");
return -4;
}
nRet = fclose(fp);
if(nRet)
{
printf("close failed!\n");
return -2;
}
printf("close success!\n");
return 0;
}
如果第一次只读4个字节,ll内容为12345678hell
则读完后readBuff为1234
此时光标在4后面,在继续读入4个字节,ll内容为1234hellhell
#include<stdio.h>
#include<string.h>
int main()
{
FILE *fp = NULL;
int nRet = 0 ;
char readBuff[12];
char *writeBuff="hello world";
memset(readBuff,0,12);
fp =fopen("ll","r+");
if (fp == NULL)
{
printf("open failed!\n");
return -1;
}
printf("open success!\n");
nRet =fread(readBuff,4,1,fp);
if(nRet<=0)
{
printf("readBuff failed!");
return -3;
}
printf("readBuff is %s",readBuff);
nRet = fwrite(writeBuff,4,2,fp);
if(nRet<=0)
{
printf("write failed!");
return -4;
}
nRet = fclose(fp);
if(nRet)
{
printf("close failed!\n");
return -2;
}
printf("close success!\n");
return 0;
}
如果第一次只读4个字节,ll内容为1234hellhell
则读完后readBuff为1234
此时光标在4后面,在继续读入8个字节,ll内容为1234hello wo
说明r+的写入是从光标后面写入,会覆盖写入的那几位的内容,写入长度如果小于光标后面的长度,则写入完成后,多余的长度里面的内容不变。如果写入大于后面的长度,则后面所有内容均会被覆盖