当前位置: 首页 > ai >正文

IO与文件·I(linux+C)

目录

背景及概念介绍

C文件接口

fopen

open

fread/fwrite

read/write

fclose

close

补充

小知识


背景及概念介绍

1.文件分为打开的文件和被打开的文件。

2.未打开的文件存在磁盘上。

3.依据冯诺依曼体系,访问一个文件都需要先打开文件,就是将文件加载到内存中,因为CPU只能和内存交流。

 

4.操作系统(OS)内一定存在大量被打开的文件(运行起来所必要的程序文件)。

所以会存在一种结构体,来描述被打开的文件,像PCB描述进程一样。 

 

5.对文件的所有操作,都是对外设(磁盘、显示器、键盘等)的输入和输出,简称IO。

 

6.文件操作本质是进程对文件的操作。

 

7.磁盘的管理者是操作系统。

C文件接口

fopen

 用来打开文件的C语言库函数,其中pathname为路径(只给文件名默认在当前路径下),mode为打开模式。

mode 打开模式有许多种,常用如下:

open

对于一个语言级别的库函数来说,它想要与内存等交流需要通过管理者操作系统来进行,所以fopen底层封装了open系统调用。

pathname依旧为路径(只给文件名默认在当前路径下)

flags为一个用来区分模式的数字,传参时,会传给它不同的宏(一个只有某个比特位是1的数字,运用位图传递标志位,比如1 2 3 8 16等)

常用如下:

 

mode为权限,就是文件的rwx权限。

例:多种宏组合成一个模式

fd是文件描述符,用来标识一个文件。

fread/fwrite

fread参数表

对于使用fread时,可以使用feof判断是否读到文件结尾

fwrite参数表

read/write

read:fread封装的系统调用

 

write:fwrite封装的系统调用

fseek/rewind

文件指针:就是一个用来指向文件位置的指针,可以将文件看做一维数组,文件指针就是数组指针。

rewind:定位文件指针到最开头

fseek:定位文件指针。

fseek参数表

fclose

 

close

补充

1.进程在启动时,就会默认打开三个文件,stdin,stdout,stderror,就是标准输入,标准输出,标准错误。

2.本质向显示器中写入,就是向stdout文件中写入。

3.为什么C语言要封装文件操作接口

(1)系统调用的使用需要的知识较多,直接使用成本较高。

(2)不同操作系统的接口不同,为了C语言的跨平台性和可移植性。(C标准库中,对各种操作系统都进行封装,采用条件编译进行区分)。

小知识

1.向显示器中输出时,都是以字符形式,比如一个int类型234,打印时是拆成一个一个的字符‘4’‘5’‘6’来打印的,叫格式化输出。

2.显示器和键盘都是文本文件,需要格式化工作,而对于二进制文件来说,不需要格式化工作。

3.文件本身的属性决定了它是二进制文件还是文本文件,而不是因为调用了不同的接口。

http://www.xdnf.cn/news/2291.html

相关文章:

  • 洛谷题目:P8856 [POI 2002] 火车线路 题解(有一点难)
  • Docker(二):docker常用命令
  • 概率论与统计(不确定性分析)主要应用在什么方面?涉及到具体知识是什么?
  • 如何识别DDoS攻击类型及有效防护?一篇简明指南
  • Git Bash 下使用 SSH 连接出现 “Software caused connection abort” 问题
  • Macos m系列芯片环境下python3安装mysqlclient系列问题
  • 数据需求管理办法有哪些?具体应如何应用?
  • 图神经网络(GNN)基本概念与核心原理
  • 某化工厂运维升级:智和信通运维平台实现工业交换机智能管理
  • Maven 4.0.0 模式-pom.xml配置详解
  • 《AI大模型应知应会100篇》第37篇:Agent框架入门:让AI具备自主行动能力
  • 数字巴别塔:全栈多模态开发框架如何用自然语言重构软件生产关系?
  • Unity 和 Unreal Engine(UE) 两大主流游戏引擎的核心使用方法
  • 回顾|Apache Cloudberry™ (Incubating) Meetup·2025 杭州站
  • MyBatis 类型处理器(TypeHandler)注册与映射机制:JsonListTypeHandler和JsonListTypeHandler注册时机
  • 174页Deepseek大模型在银行系统的部署方案
  • 一、I/O的相关概念
  • Spark RDD行动算子与共享变量实战:从数据聚合到分布式通信
  • 基于SpringBoot+PostgreSQL+ROS Java库机器人数据可视化管理系统
  • 热红外遥感在火情监测中有什么作用?
  • 深入Java JVM常见问题及解决方案
  • Java位运算符大全
  • 亚组风险比分析与可视化
  • OceanBase单机重启和配置修改
  • 再学GPIO(一)
  • 汽车制造行业如何在数字化转型中抓住机遇?
  • springboot不连接数据库启动(原先连接了mysql数据库)
  • 【Redis】Redis Zset实现原理:跳表+哈希表的精妙设计
  • C++初阶-STL简介
  • 怎样给MP3音频重命名?是时候管理下电脑中的音频文件名了