open 系列API 和 fopen系列API的区别
1.来源:
 -open 是UNIX系统调用函数(包括LINUX系统),返回的是文件描述符
 -fopen是ANSIC标准的C语言库函数,在不同系统重调用不同内核的API
2.移植性:
 fopen 是C标准函数,具有良好的移植性;
 而opne是unix系统调用,移植性有限(砸死window下运行怒了,可以用功能一样的CreateFile调用)
3.适用范围:
 open返回文件操作符,在unix系统下使用,可以硬件设备对接
 fopen 用来操作普通正规文件
4.文件IO层次:
 open里系统内核更接近,属于低级文件IO,运行在内核态,高级文件IO运行在用户态(缓冲区)
5.缓冲:
 fopen --缓冲文件系统,设置文件结构体指针, 等一堆f开头的api都是在缓冲区运行 -- 执行速度快,效率高。
 open --非缓冲文件系统,无文件结构体指针,值读写二进制文件,效率高,速度快
 总结: open 无缓冲,fopen有缓冲
由于fopen渔鸥缓冲,减少了用户态和内存太的切换,而open每次都需要切换;
 if 顺序访问文件的话,fopen的效率更高,随机访问的话计算open的效率高
==================================================
fopen系列API调用:
 fopen:
FILE *fopen(char *filename,char *mode);

 =============================
#include<stdio.h>
#include<string.h>int main()
{
FILE * fp;
char *str="mxjun hen shuai!";
char readBuf[128]={0};
fp=fopen("./mxj.txt","w+");fwrite(str,sizeof(char),strlen(str),fp);
fwrite(str,sizeof(char)*strlen(str),1,fp);fseek(fp,0,SEEK_SET);
//size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
fread(readBuf,sizeof(char),strlen(str),fp);
printf("read data:%s\n",readBuf);
fclose(fp);
return 0;
}
 ==================
 标准C库结构体写入文件:
 
//读写返回值的区别:
 指定 写的个个数 >  实际 接收到的个数,返回值是大值(不够写了'\0'补充)
 而指定读的个数更大,返回值只能是小者,算指定最大读取数
#include<stdio.h>
#include<string.h>struct Test
{
int a;
char b;
};int main()
{
FILE * fp;
struct Test data ={100,'a'};\
struct Test data2;fp=fopen("./mxj.txt","w+");
fwrite(&data,sizeof(struct Test),1,fp);
fseek(fp,0,SEEK_SET);
//size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
fread(&data2,sizeof(struct Test),1,fp);
printf("read data2:%d %c\n",data2.a,data2.b);
fclose(fp);
return 0;
}
===========================
 fputc()  --  一次将一个字符的写入文件
 
 函数原型:
    int fputc(int c, FILE *stream);
#include <stdio.h>
#include<string.h>
int main()
{
FILE *fp;
int i;
char *str="mxjun giegie!!!";
int len=strlen(str);
fp = fopen("./stest.txt", "w+");
for(i=0;i<len;++i)
{
fputc(*str,fp);
str++;
}
fclose(fp);
return 0;
}
feof() fgetc()
 feof() -- 判断是否到文件尾巴 --到尾巴返回0
fgetc() --读取文件字节
#include <stdio.h>
#include<string.h>
int main()
{
FILE *fp;
int i;
char c;
fp = fopen("./stest.txt", "r");
while(!feof(fp)){
c=fgetc(fp);
printf("%c",c);
}
fclose(fp);
return 0;
}





![[中级]软考_软件设计_计算机组成与体系结构_12_概述及回顾](https://img-blog.csdnimg.cn/direct/8221859f3e7041ab9658dc6505bf54ff.png)













