由上小节知道,C库函数是借助FILE类型的结构体来对文件进行操作的,其本身只是在用户空间(I/O缓冲区)进行读写操作,而数据在内核与用户空间之间的传递、以及将内核与I/O设备之间的数据传递都是该C库函数进行一系列的系统调用来完成的。每一个C库函数(接口函数,API)对应的是一个或多个系统调用。

下图以printf函数为例。printf是标准输出流的输出函数(其文件描述符为1,STDOUT_FILENO),用来向屏幕这样的标准输出设备输出,而fprintf则是向文件输出,将输出的内容输出到硬盘上的文件或是相当于文件的设备上。printf是行缓冲的输出,fprintf是全缓冲的输出。

由该图可以看出,C库函数printf标准输出的文件描述符为fd,文件读写指针为FP_POS,I/O缓冲区为BUFFER,其中存储了要输出的内容(hello),这些都保存在FILE结构体中。为了实现将缓冲区的数据送入内核缓冲中,printf函数需要调用write函数,其有三个参数:文件描述符、字符串和字符串长度,从而把文件描述符和输出的内容传递到内核。强调一点:write函数是应用层的函数,处于用户空间,对用户空间进行操作。接着,调用函数sys_write( ),该函数完成一个系统调用,位于内核空间,对内核操作,调用相应的设备驱动程序,属于内核层。最后,设备驱动程序运行,驱动设备完成输出数据到显示器的操作,属于硬件层。这也是由系统调用来完成的。

C库函数与Linux系统函数之间的关系相关推荐

  1. Linux系统函数之IO函数

    技术交流 QQ 群:1027579432,欢迎你的加入! 欢迎关注我的微信公众号:CurryCoder的程序人生 1.标准C库IO函数工作流程 IO缓冲区的作用? 大部分硬盘都是机械硬盘,读取寻道时间 ...

  2. Linux 系统函数

    Linux 系统函数 可以使用 man 2 函数名 查看 系统函数 也可以在 文件内 使用 2+ shift +k 进入指定函数 (前提是光标停在指定函数上) open 函数 int open(con ...

  3. linux网络编程之用一张图片说明函数inet_ntop、inet_pton、inet_addr、inet_ntoa 、inet_aton函数之间的关系

    1.inet_ntop.inet_pton.inet_addr.inet_ntoa .inet_aton函数之间的关系 2.inet_ntop.inet_pton函数的源代码 1.inet_pton函 ...

  4. 【转】mac os、linux及unix之间的关系

    [转]mac os.linux及unix之间的关系 mac os.linux及unix之间的关系 unix 是由贝尔实验室开发的多用户.多任务操作系统 linux是一类Unix操作系统的统称,严格来说 ...

  5. 使用croc命令在Linux系统电脑之间传输文件和文件夹

    ‍在两台或多台计算机之间传输文件的方法有很多.‍你可以使用基于服务器的文件共享工具,点对点文件共享app,U盘,外部硬盘驱动器,SCP,NFS,FTP,HTTP,云存储平台等等. 本文将介绍一个名为 ...

  6. Linux系统服务器之间传输数据

    问题描述: 由于实验室新购置了服务器,目前在商家那边,因而需要将原服务器(部署在学校内)的数据进行部分迁移.但由于老服务器设置只能是校园局域网访问,因而必须从老服务器向新服务器传输数据.传输过程主要涉 ...

  7. python封装api linux_python Socket编程-python API 与 Linux Socket API之间的关系

    python socket编程 by SA19225409 地址协议家族 Python 支持 AF_UNIX. AF_NETLINK. AF_TIPC 和 AF_INET 家族 AF_UNIX 基于本 ...

  8. Unix/Linux/BSD 它们之间的关系以及各自派系的介绍

    文章目录 一.Unix 是什么 二.Unix 派系 (一)BSD 分支 1.BSD 是什么 2.由 BSD 衍生的闭源 Unix 版本 3.由 BSD 衍生的开源 Unix 版本 (二)System ...

  9. STM32工作笔记0098---Windows下的Linux环境_Cygwin_MinGW_MSYS_MSYS2_之间的关系

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 MSYS2 网上有很多文章讲它们之间的区别与联系,初学者看的一头雾水,在知乎上看到这篇文章讲的很清 ...

最新文章

  1. shell任务不受意外中断影响的常见方法
  2. Memcached全面剖析
  3. java intf判断变量类型_Java 的数据类型
  4. 异常检测——无监督、高斯分布模型,需要带标记的样本数据,基本假设:特征符合高斯分布...
  5. java backlog满_java socket参数详解:BackLog
  6. 数据时代,信息的无处遁形
  7. 浏览器填写数据,跳转页面返回数据不消失
  8. PHP浮点运算结果出现误差原因分析及解决方案
  9. Java web 应用全局变量_将properties文件的配置设置为整个Web应用的全局变量。
  10. php中ignore_user_abort函数的用法(定时)
  11. php error_log记录日志的使用方法和配置
  12. centos7 搭建安装zabbix3.0邮件告警实例(二)
  13. MySQL数据类型有哪些?
  14. Windows 常用软件清单
  15. 如何检测电脑系统是否为正版系统
  16. RGB转LVDS芯片
  17. 2019CSP初赛基础知识整理
  18. word计算机桌面加密,word文档加密,怎么让word自动加密 -电脑资料
  19. JDK环境配置和eclipse安装
  20. Carson带你学Android:图文详解RxJava背压策略

热门文章

  1. NavMeshAgent 动态加载障碍物
  2. MVC3中的视图文件
  3. 《深入浅出WPF》笔记——绑定篇(一)
  4. 百度面试题:从输入url到显示网页,后台发生了什么?
  5. Mapx的VC开发实践
  6. 11小时 python自动化测试从入门到_从设计到开发Python接口自动化测试框架实战,资源教程下载...
  7. 计算机技术与分析化学论文,分析化学(论文).doc
  8. python的ogr模块_python GDAL/OGR模块安装注意事项
  9. Command mysql 中文,MySQL Command Line[mysql命令行常用命令]_MySQL
  10. 《MySQL——Innodb改进LRU算法》