UNIX编程:--标准I/O库之(fread()write())
Posted youdud
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UNIX编程:--标准I/O库之(fread()write())相关的知识,希望对你有一定的参考价值。
一、前言
在前面文章内容中小编介绍的函数以1次一个字符或1次一行的方式进行操作。假如进行二进制I/O操作,那么小编更愿意1次读活蟹1个完整的结构。假如采用getc()或putc()读、写一个结构,那么必须循环通过整个结构,每一次循环处理一个字节,1次读或写一个字节,这会非常的麻烦。假如采用fputs()或fgets(),那么由于fputs()在遇到null字节时就停止,而在结构中可能含有null字节,因此 不能采用它实现读结构的要求;类似的,fgets()遇到null也会停止工作
因此提供了下边2个函数以二进制I/O操作
二、fread()、fwrite()
fread()
size_t fread(void *buffer, size_t size, size_t count, FILE *stream);
功能:从stream流中读取count次数据,每次读取size个字节大小。然后写入到buffer中
返回值:
读取成功:返回实际读取stream流的次数,而不是字节数
读取失败/达到文件尾:返回0
若stream或buffer为空指针,或在unicode模式中写入的字节数为奇数,此函数设置errno为EINVAL以及返回0
fwrite()
size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);
功能:从buffer中读取count次,每次读取size个字节,然后写入到stream流中
返回值:
读取成功:返回实际写入stream流的次数,而不是字节数
//将一个结构体信息写入到文件中,然后再文件中读出来
#include<stdio.h>
#include<string.h>
typedef struct student
{
int age;
char name[20];
}stu;
int main()
{
stu Man={17,"xiaoming"};
stu Man2;
FILE *pf;
if(pf=fopen("Demo.txt","w+"))
{
fwrite(&Man,sizeof(stu),1,pf);
}
fclose(pf);
if(pf=fopen("Demo.txt","r"))
{
fread(&Man2,sizeof(stu),1,pf);
printf("Age:%d,Name:%s
",Man2.age,Man2.name);
fclose(pf);
}
return 0;
}
以上是关于UNIX编程:--标准I/O库之(fread()write())的主要内容,如果未能解决你的问题,请参考以下文章