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

Linux学习日记6:文件IO与标准IO

一、前言

        前面我们学习了CP指令的相关知识以及CP指令的实现,今天我们来学习文件IO与标准IO的区别, 这是Linux 文件操作的核心,理解两者差异是高效编程的关键。

二、文件IO

        Linux 中文件 IO(系统级 IO)是内核提供的底层接口,直接与内核交互,无中间封装层;文件IO是直接调用内核提供的系统调用函数, 头文件是unistd.h。如下图所示:

        上图中的应用代码即程序缓存,就是想从内核读写的缓存(数组),也叫用户缓存,每打开一个文件,内核在内核空间中也会开辟一块缓存,这个叫内核空间的缓存;文件IO中的写即是将用户空间中的缓存写到内核空间的缓存中;文件IO中的读即是将内核空间的缓存写到用户空间中的缓存中,默认无缓存,数据读写需用户手动管理缓存区。像我们之前所学的open、close、writeread函数都是文件IO,都以文件描述符为操作对象,是一个非负整数。如下图所示:

        我们用一个简单的小例子来进行讲述:

#include<unistd.h>int main(int argc,char *argv[])
{char readbuf[20]="hello world";write(1,readbuf,12);return 0;
}

        如上代码所示,我们将一串字符串通过write函数写出来(文件描述符为1,代表输出),然后通过gcc编译器进行编译,然后运行:

        可以看到write函数成功地将字符串打印了出来。

三、标准IO

        标准 IO 是 C 标准库(如 glibc)提供的接口,是间接调用系统调用函数,头文件是: stdio.h;底层基于文件 IO 实现,核心作用是封装缓存简化编程,如下图所示:

        标准IO的库函数中也有一个缓存,这个缓存称为----库缓存,库缓存的特点有:1.遇到\n 时,会将库缓存的内容写到内核缓存中,即调用了系统调用函数;2、库缓存写满时,会调用系统调用函数,将库缓存内容写到内核缓存中(写满的条件是1024个字节)。   

        我们用一个简答的小例子来进行描述:

/#include<unistd.h>
#include<stdio.h>int main(int argc,char *argv[])
{char readbuf[20]="hello world";//write(1,readbuf,12);printf("%s\n",readbuf);while(1);return 0;
}

        如上代码所示,我们将文件IO替换成标准IO,并加上一个死循环,然后使用gcc编译器进行编译,然后运行:

        可以看到“hello world”被成功地打印了出来。那如果我们将\n给删掉会怎么样?

//#include<unistd.h>
#include<stdio.h>int main(int argc,char *argv[])
{char readbuf[20]="hello world";//write(1,readbuf,12);printf("%s",readbuf);while(1);return 0;
}

        再次编译并运行:

        这时候可以发现字符串打印不出来了,这就验证了C库缓存的存在。

http://www.dtcms.com/a/532933.html

相关文章:

  • 网站开发工作经验怎么写幸福宝推广app网站下载
  • 如何使用Spring Context实现消息队列
  • Python数据分析中,如何使用Docker Compose管理多个容器?
  • 济南建设网站企业收费公司网站建设的目的和意义
  • 注册了域名怎样做网站中国建设银行怎么查询余额
  • 【类与对象(中)】C++类默认成员函数全解析
  • 北京网站开发最专业的公司浏览器网址链接
  • 使用 Actix-web 开发高性能 Web 服务
  • 网站编辑怎么做内容分类网络营销是做什么的
  • C++ STL:string(2) |Capacity|Modifiers|operations|OJ练习
  • 一个网站的二维码怎么做国外免费源码共享网站
  • YOLOv5:实时目标检测的现代化实践与深度解析
  • 丰城网站建设公司泰安正规网站建设公司电话
  • 弹簧机 东莞网站建设成都大型网站设计公司
  • 做简历的什么客网站i5 7500网站开发
  • 遵义网站网站建设珠海做网站哪家最专业
  • 成都航空公司官方网站wordpress 浮动小人
  • 掌握 Cursor:AI辅助开发战略指南
  • Github仓库上传图片并获取URL
  • 如何弄一个网站天美影视传媒有限公司
  • 企业管理官网登录入口南阳做网站优化公司
  • C++容器map
  • 【下载】电视家TV极速版功能介绍下载,免费看
  • 命令真值表(Command Truth Table)
  • 使用现代新硬件安装 Windows 7 的特别注意事项
  • 实验一:基于MATLAB控制系统单位阶跃响应分析
  • 优势网网站视频推广渠道有哪些
  • 2025智能体发展已经进入第3阶段了?企业发展Agent需要注意哪些核心竞争力?
  • 将有序数组转换为二叉搜索树-力扣
  • 【推荐100个unity插件】在unity快速生成3D人物自然姿势和动作,且支持按图像生成姿势—— Pose AI