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())的主要内容,如果未能解决你的问题,请参考以下文章

Linux探秘之I/O效率

Unix环境高级编程文件I/O

UNIX环境高级编程 标准IO库

unix下网络编程之I/O复用

UNIX网络编程入门——I/O复用

UNIX网络编程笔记—I/O复用select/poll