此为黑马Linux课程笔记。

1. C标准IO函数工作流程


如图,以C库函数的fopen为例,其返回类型是FILE类型的指针,FILE类型包含很多内容,主要包含三个内容:文件描述符、文件读写指针的位置和I/O缓冲区的地址。

  • 文件描述符:文件描述符(file descriptor)是内核为了高效管理已被打开的文件所创建的索引,其是一个非负整数(通常是小整数),用于指代被打开的文件,所有执行I/O操作的系统调用都通过文件描述符。文件描述符在Linux系统IO函数中很常用。
  • 文件读写指针位置:用于控制文件的读写位置。
  • 缓冲区地址:如使用C库函数fwrite()时,不是直接写到磁盘中,而是先写到缓冲区(默认大小8K)中,然后再一起写入硬盘中。因为反复写入磁盘,时间都浪费在寻道时间和旋转延迟上了,所以要一口气写入。当以下三种情况发生时,缓冲区的内容写入文件:1. fflush刷新缓冲区,2.缓冲区已满,3.正常关闭文件。如图:

2. C库IO函数与系统IO函数的关系


如图所示,使用C库函数时,C库函数会调用系统函数write,然后一步一步向下调用。

【Linux系统编程学习】C库IO函数与系统IO函数的关系相关推荐

  1. linux系统编程学习_(2)进程控制-- fork函数、exec函数族、回收子进程--孤儿进程僵尸进程、wait函数

    linux系统编程学习_(2)进程控制-- fork函数.exec函数族.回收子进程–孤儿进程僵尸进程.wait函数 进程控制 fork()函数 创建一个子进程. pid_t fork(void); ...

  2. linux线程并不真正并行,Linux系统编程学习札记(十二)线程1

    Linux系统编程学习笔记(十二)线程1 线程1: 线程和进程类似,但是线程之间能够共享更多的信息.一个进程中的所有线程可以共享进程文件描述符和内存. 有了多线程控制,我们可以把我们的程序设计成为在一 ...

  3. 嵌入式Linux系统编程学习之二常用命令

    嵌入式Linux系统编程学习之二常用命令 文章目录 嵌入式Linux系统编程学习之二常用命令 前言 一.常用命令 1.su(用户切换) 2.useradd(添加用户) 3.passwd(修改密码) 4 ...

  4. 嵌入式Linux系统编程学习之一目录结构

    嵌入式Linux系统编程学习之一目录结构 文章目录 嵌入式Linux系统编程学习之一目录结构 前言 一.Linux目录结构 前言 Linux目录结构 一.Linux目录结构 /bin:存放Linux的 ...

  5. 嵌入式系统开发学习步骤(Linux高级编程学习顺序)

    2019独角兽企业重金招聘Python工程师标准>>> 嵌入式系统开发学习步骤(Linux高级编程学习顺序) 1.Linux 基础 安装Linux操作系统 Linux文件系统 Lin ...

  6. Linux系统编程 25 动态库和静态库 理论对比

    Linux系统编程 25 动态库和静态库 理论对比 库分为两类 1.静态库 2.动态库(共享库) 静态库 是在可执行程序运行前就已经加入到执行码中, 成为执行程序的一部分 共享库(动态库) 执行程序启 ...

  7. I.MX6U嵌入式Linux应用编程学习

    I.MX6U嵌入式Linux应用编程学习 目录 I.MX6U嵌入式Linux应用编程学习 〇.备忘 0.0 本文大写字母缩写说明 0.1 C编译 0.2 NFS与文件夹挂载 一.应用编程概念 1.1 ...

  8. 《Linux Shell编程学习笔记之一》

    <Linux Shell编程学习笔记之一> 前言 由于自己一直在Windows上面编程,用linux用的比较少,学习linux还是本科大二学的一点点知识.因此自己就准备花点时间来熟悉下li ...

  9. Linux shell编程学习

    Linux shell编程学习 shell是一个作为用户与Linux系统间接口的程序,它允许用户向操作系统输入需要执行的命令.这点与Windows的命令提示符类似,但Linux shell的功能更加强 ...

  10. Linux Shell编程学习笔记(3)

    Linux Shell编程学习笔记(2015-7-19) 分类:linux shell 一:位置参数和特殊变量   什么是位置参数?   位置参数也叫位置变量,是运行shell脚本程序时,命令行she ...

最新文章

  1. 基于边缘云的机器流量管理技术实战
  2. BZOJ 3053 The Closest M Points
  3. hbaseRegion的划分
  4. matlab 中.*和* 区别
  5. 103规约测试软件,Protocoltester(国电南自103规约调试软件)
  6. 用印审批移动办公用户手册
  7. 关于射频同轴连接器的功率容量探讨
  8. CashFiesta 攻略
  9. python算法 之 猜词游戏
  10. java retained size_使用MAT时的Shallow Size和 Retained Size的区别
  11. sketchup转stl_求助,如何将skp转换成stl实现3d打印?
  12. 云虚拟主机☀️利用FileZilla,使用FTP协议给阿里云虚拟主机上传、下载文件
  13. imx6芯片通过EIM总线外扩多路sja1000 CAN控制器
  14. java版 我的世界 win10_我的世界win10版
  15. 如何删除卸载苹果mac电脑应用软件没有残留垃圾
  16. 匹兹堡大学申请条件计算机科学,匹兹堡大学计算机科学硕士专业入学要求及费用...
  17. java毕业设计校园内推系统mybatis+源码+调试部署+系统+数据库+lw
  18. 一步步教你微信怎么搭建小程序
  19. 注册会计师考试时可用计算机吗,2019注册会计师考试:cpa机考系统计算器你会用吗?...
  20. 常见的wait等待事件及处理

热门文章

  1. 如何搭建lamp(CentOS7+Apache+MySQL+PHP)环境 [转]
  2. node模块函数图解
  3. -bash: belts.awk: command not found
  4. Visual Studio Team System 2008 Team Suite 简体中文正式版
  5. python列表字符串转数字_python 将列表中的字符串转为数字
  6. php网页的注册界面设计,HTML开发博客之注册页面设计(一)
  7. 荣耀鸿蒙系统开机动画,荣耀赵明:鸿蒙系统首发设备欲屏蔽开机广告
  8. 华为鸿蒙出来正当时,关于华为鸿蒙操作系统,中兴率先表态
  9. java web 保护_java web项目请求控制及简单漏洞防范
  10. python绘制散点图的函数_python matplotlib更新函数的散点图