fwrite和write的区别
首先要明白不带缓冲的概念:所谓不带缓冲,并不是指内核不提供缓冲,而是只单纯的系统调用,不是函数库的调用。系统内核对磁盘的读写都会提供一个块缓冲,当用write函数对其写数据时,直接调用系统调用,将数据写入到块缓冲进行排队,当块缓冲达到一定的量时,才会把数据写入磁盘。因此所谓的不带缓冲的I/O是指进程不提供缓冲功能。每调用一次write或read函数,直接系统调用。
而带缓冲的I/O是指进程对输入输出流进行了改进,提供了一个流缓冲,当用fwrite函数网磁盘写数据时,先把数据写入流缓冲区中,当达到一定条件,比如流缓冲区满了,或刷新流缓冲,这时候才会把数据一次送往内核提供的块缓冲,再经块缓冲写入磁盘
C语言fwrite怎么写入文件?
C语言fwrite写入文件可以参考以下的代码:
//定义一个学生结构体
structStudent_type
{
charname[10];
intnum;
intage;
charaddr[30];
}stud[40];
inti;
FILE*fp;//定义一个文件指针fp
fp=fopen("stu.dat","wb");//以二进制可写方式打开stu.dat文件
//将40个学生的记录写入文件stu.dat中
for(i=0;i<40;i++)
fwrite(&stud[i],sizeof(structStudent_type),1,fp);
扩展资料:
fwrite函数用法
size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);
返回值:返回实际写入的数据块数目
1、buffer:是一个指针,对fwrite来说,是要获取数据的地址
2、size:要写入内容的单字节数
3、count:要进行写入size字节的数据项的个数
4、stream:目标文件指针
5、返回实际写入的数据项个数count
说明:写入到文件的哪里与文件的打开模式有关,如果是w+,则是从file pointer指向的地址开始写,替换掉之后的内容,文件的长度可以不变,stream的位置移动count个数;如果是a+,则从文件的末尾开始添加,文件长度加大。
fek对此函数有作用,但是fwrite函数写到用户空间缓冲区,并未同步到文件中,所以修改后要将内存与文件同步可以用fflush(FILE *fp)函数同步。
参考资料来源:百度百科-fwrite
fread和fwrite的区别是什么
fwrite和fread是以记录为单位的I/O函数,fread和fwrite函数一般用于二进制文件的输入输出。
fread和fwrite的函数原型分别为:
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
fread和fwrite函数的返回值:
读或写的记录数,成功时返回的记录数等于nmemb,出错或读到文件末尾时返回的记录数小于nmemb,也可能返回0。
fread和fwrite函数参数的含义:
参数size指出一条记录的长度;
参数nmemb指出要读或写多少条记录,这些记录在ptr所指的内存空间中连续存放,共占size * nmemb个字节;
ptr是指向的某连续内存空间的指针;
stream是文件指针;
fread从文件stream中读出size * nmemb个字节保存到ptr中所指的内存空间中;
fwrite把ptr中的size * nmemb个字节写到文件stream中。
C语言关于fwrite函数的问题
fwrite就是写入用的函数,fread和fwrite用于读写各种类型的数据块
第一个参数是读写数据的内存区的指针,
第3个是项数,
第2个是每一项的大小,
第4个是文件指针
fwrite返回写出的项数,不出错就等于要写的项数,
所以他判断是否和1相等来判断出错
他这里的(struck
address_list)应该用sizeof(struck
address_list)
不用fopen打开fwrite也没法写入,
"wb"是指定fopen的怎样打开文件,
文件如过不存在,r出错,
a生成,并且写入的数据都被添加到文件尾,w也生成
C语言 fwrite()和fprintf()的区别
fwrite是向流中写入数据,而fprintf是向流中写入格式数据。两者的共同点为向流中写入数据,至于区别可以看看两者的申明:
size_tfwrite(
constvoid*buffer,
size_tsize,
size_tcount,
file*stream
);
intfprintf(
file*stream,
constchar*format[,
argument]...
);
前者fwrite写入流stream中的数据是buffer指定的内容,内容的字节大小分别由size和count两个参数来指定,因此写入流stream中的内容有可能是乱码,但是有效的数据。
后者fprintf写入流stream中的数据则由argument来指定,并且这些argument的内容分别由format指定的格式来显示,因此写入stream的内容通常来说是文本字符流,当然,也允许写入格式乱码。
两者都可以将文本写入流stream中。比如:
fwrite("helloworld!",1,12,fp);
与
fprintf(fp,"%s","helloworld!");
等价。
关于fwrite的使用问题
我记得fwrite的返回值是 成功些如文件的个数。
假设全部写入成功,那么返回值取决与COUNT参数
如果写入失败比如大小确定不对或者buffer没指好返回应该是0个,表示没一个写入
返回值是成功个数。
另外,你最后要说的是size=17字节与size=20字节时吧?buffer是指针。。占一字节
qq107395975