标准C库文件操作

news2024/11/27 8:46:27

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;
}


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1582253.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue 移动端(H5)项目怎么实现页面缓存(即列表页面进入详情返回后列表页面缓存且还原页面滚动条位置)keep-alive简单使用

一、需求 产品要求&#xff1a;Vue移动端项目进入列表页&#xff0c;列表页需要刷新&#xff0c;而从详情页返回列表页&#xff0c;列表页则需要缓存并且还原页面滚动条位置 二、实现思路 1、使用Vue中的keep-alive组件&#xff0c;keep-alive提供了路由缓存功能 2、因为我项…

基于知识图谱的推理:智能决策与自动发现

基于知识图谱的推理&#xff1a;智能决策与自动发现 一、引言 在今天这个数据驱动的时代&#xff0c;我们经常会听到人们提及“知识图谱”这个词。知识图谱&#xff0c;作为一种结构化知识的表达方式&#xff0c;已经成为智能系统不可或缺的一部分&#xff0c;它通过连接大量的…

ModuleNotFoundError: No module named ‘mlxtend‘

from mlxtend.plotting import plot_decision_regions 报错信息: ModuleNotFoundError: No module named mlxtend Jupyter和Spyder报错原因&#xff1a;因为anaconda下没有这个模块&#xff0c;需要安装mlxtend 解决方案&#xff1a; 1.打开anaconda(或终端) 2. 点击路径点…

项目文章| Plant CellDAP-seq解析草莓NAC转录因子FvRIF的调控网络

DAP-seq是一种体外研究蛋白与DNA结合的技术&#xff0c;该技术利用麦胚乳表达体系表达目标蛋白然后与基因组DNA文库体外孵育&#xff0c;得到目标蛋白的结合信息。与ChIP-seq和CUT&Tag不同&#xff0c;DAP-seq不需要抗体&#xff0c;在植物中应用更为广泛。今天我们分享一篇…

Java开发面试题分享

目录 1、简述MyISAM和InnoDB的区别 2、简述Hash和B树索引的区别 3、简述MyBatis的实现逻辑 4、#{}和${}的区别 5、简述Mybatis的优缺点 6、当实体类中的属性名和表中的字段名不一样时怎么办&#xff1f; 7、resultType与resultMap的区别 8、如何执行批量插入 9、Mybat…

[中级]软考_软件设计_计算机组成与体系结构_12_概述及回顾

概述及回顾 总纲考情分析与分值海明校验码计算公式重点 总纲 考情分析与分值 海明校验码计算公式 2 r m r 1 2^r mr1 2rmr1 重点 数据的表示是计算题型的基础计算机组成中的CPU组成计算机组成中的存储系统&#xff0c;是核心重点的考察CISC与RISC及流水线执行时间的求取

YOLOv8在windows平台的C++推理

前言 YOLOv8很多人很多人很熟悉了,现在V9都已经出来了,学习没有比别人更新的快! 个人记录一下在windows平台使用C++推理的记录。 环境配置 YOLOv8的传统的环境配置,就不多说,网上很多参考教程。 需要注意的点就是,本次C++推理需要使用OPENCV的DNN模块,所以我们需要下…

每日OJ题_BFS解决FloodFill①_力扣733. 图像渲染

目录 BFS解决FloodFill简介 力扣733. 图像渲染 解析代码 BFS解决FloodFill简介 FloodeFill算法即填充算法&#xff0c;中文&#xff1a;洪水灌溉&#xff0c;算法原理就是从一个点开始向四周扩散&#xff0c;向周围可以走到的点填充颜色&#xff0c;直到将可扩散到的点全部填…

ElasticSearch分词检索

1. 倒排索引&#xff1a;表示一种数据结构&#xff0c;分词词条与文档id集合的隐射关系 2. 它跟关系型数据库是一种互补的关系&#xff0c;因为关系型数据库支持事务操作&#xff0c;满足ACID原则 3. 索引库的文档字段只允许新增不允许修改 1.创建索引库 put /索引库名称2.1 …

Altair® (澳汰尔)Inspire™ Render —— 强大的 3D 渲染和动画工具

Inspire Render 是一种全新 3D 渲染和动画工具&#xff0c;可供创新设计师、建筑师和数字艺术家以前所未有的速度快速制作精美的产品演示。 借助基于物理特性的内置高品质全局照明渲染引擎 Thea Render&#xff0c;可以快速创建、修改和拖放各种材质并添加照明环境&#xff0c…

风电场智能化转型基于ARM工控机的HDMI数据实时监控显示

全球能源结构不断调整的大背景下&#xff0c;智能电网、太阳能发电、风能发电等清洁能源领域正经历着一场由技术创新引领的深刻变革。在这场变革中&#xff0c;ARM架构的工控机凭借其出色的性能、低功耗及高度可定制化的特点&#xff0c;正在成为能源管理系统的核心组件&#x…

LeetCode-1702. 修改后的最大二进制字符串【贪心 字符串】

LeetCode-1702. 修改后的最大二进制字符串【贪心 字符串】 题目描述&#xff1a;解题思路一&#xff1a;贪心&#xff0c;几个规则。解题思路二&#xff1a;当前遇到0&#xff0c;去找下一个0的位置&#xff0c;将当前变为00。通过解题思路三&#xff1a;另一种贪心写法。 题目…

从电工到电气工程师:PLC编程之路

在当前的工业自动化时代&#xff0c;电气工程师的角色变得越来越重要&#xff0c;特别是在掌握了PLC&#xff08;可编程逻辑控制器&#xff09;编程技能后&#xff0c;这一技能不仅能够大幅提升生产效率&#xff0c;还能为企业节省大量成本。对于那些从事电工职业的人来说&…

中科数安 || 透明加密是怎么防止公司办公终端电脑文件资料外泄的?

#企业电脑数据防泄密软件# 中科数安作为一家专注于信息安全领域的公司&#xff0c;其提供的透明加密解决方案旨在通过以下机制来防止公司办公终端电脑上的文件资料外泄&#xff1a; 中科数安 || 公司办公透明加密系统 PC地址&#xff1a;www.weaem.com 实时加密&#xff1a; …

《由浅入深学习SAP财务》:第2章 总账模块 - 2.6 定期处理 - 2.6.1 月末操作:自动清账

2.6.1 月末操作&#xff1a;自动清账 清账是指会计科目的借贷挂账后的核销&#xff0c;包括客户、供应商和实行未清项管理的总账科目等。 总账模块实行未清项管理的科目有GR/IR&#xff08;Goods Receipt/Invoice Receipt&#xff09;、银行存款-清账&#xff08;较少使…

O2OA(翱途)开发平台-如何基于nginx上下文分发的方式快速集群部署

O2OA(翱途)开发平台[下称O2OA开发平台或者O2OA]使用分布式架构设计&#xff0c;提供灵活的扩展方案用于对服务器的负载能力进行扩展&#xff0c;保障系统的高可用性。本篇主要介绍如何基于nginx上下文分发的方式快速集群部署。 O2OA平台应用结构 O2OA服务器默认启动5个服务&am…

51单片机 DS1302

DS1302 实现流程 将提供的ds1302底层参考程序拷贝到工程下 注意在ds1302.c中可能硬件引脚没有定义&#xff0c;注意去看一下。还有头文件什么的在ds1302中记得加上 参考代码&#xff1a; #include "reg52.h" #include "ds1302.h"unsigned char Write_…

Linux网络名称空间与网络协议栈:区别、联系与理解

在深入探讨Linux网络名称空间和网络协议栈之间的区别和联系之前&#xff0c;重要的是先明确这两个概念的定义。网络名称空间是Linux提供的一种虚拟化技术&#xff0c;允许在同一物理机器上运行的不同进程组拥有独立的网络环境&#x1f3e2;。而网络协议栈是操作系统用于实现网络…

【趣味学算法】14_梅森素数

注&#xff1a; 本系列仅为个人学习笔记&#xff0c;学习内容为《算法小讲堂》&#xff08;视频传送门&#xff09;&#xff0c;通俗易懂适合编程入门小白&#xff0c;需要具备python语言基础&#xff0c;本人小白&#xff0c;如内容有误感谢您的批评指正 梅森数&#xff08;Me…

从“执行SQL”到“返回结果”,数据库到底发生了什么?

SQL 全称是 Structured Query Language 结构化查询语言。由于其简单易学、完整安全、灵活且具备高可扩展性&#xff0c;SQL 如今已经成为标准的关系型数据库管理语言。 当连接到数据库&#xff0c;写下一条 SQL 语句&#xff0c;点击“执行”&#xff0c; SELECT name, compa…