标准C库文件操作

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;

}

相关推荐
DoraBigHead5 分钟前
小哆啦解题记 · 射箭引爆气球,怎么射最省箭?
算法
超浪的晨11 分钟前
Java List 集合详解:从基础到实战,掌握 Java 列表操作全貌
java·开发语言·后端·学习·个人开发
盛夏绽放13 分钟前
Excel导出实战:从入门到精通 - 构建专业级数据报表的完整指南
开发语言·javascript·excel·有问必答
我命由我1234513 分钟前
嵌入式单片机开发 - HAL 库 STM32F1 外设的时钟使能(时钟使能宏、时钟禁用宏)
c语言·c++·stm32·单片机·嵌入式硬件·嵌入式·嵌入式软件
超浪的晨16 分钟前
Java Set 集合详解:从基础语法到实战应用,彻底掌握去重与唯一性集合
java·开发语言·后端·学习·个人开发
AI_Keymaker17 分钟前
手术台上的AlphaGo:约翰霍普金斯大学发布自主手术机器人
算法·机器人
AI_Keymaker18 分钟前
人类早期驯服野生机器人珍贵影像(不是)
算法·机器人
workflower32 分钟前
活动图描述场景
开发语言·软件工程·需求分析·软件需求·敏捷流程
梦想的初衷~34 分钟前
基于现代R语言【Tidyverse、Tidymodel】的机器学习方法
开发语言·机器学习·r语言
香蕉可乐荷包蛋37 分钟前
Python学习之路(十三)-常用函数的使用,及优化
开发语言·python·学习