本期主题:
unix环境高级编程——UNIX体系架构


文件IO

  • 0.初始UNIX
  • 1.系统调用
  • 2.库函数
    • 2.1 C语言的运行库
  • 3.shell

0.初始UNIX

这里略过unix的历史不讲,网上有比较详细的资料。
我们可以将操作系统定义为一种软件 ,这种软件所做的事情包括控制计算机各种硬件资源,提供应用程序的运行环境,通常这种软件被称为内核(kernel)
整体的系统架构图如下所示:

内核的接口被称为系统调用
公用函数库构建在系统调用之上
应用程序既可以使用公用函数库,也可以是使用系统调用
shell是一个特殊的应用程序,为运行其他应用程序提供了接口

1.系统调用

/dev目录中的设备文件的用法都是相同的,它们都可以被打开、读、写和关闭。

下面是用于访问设备驱动程序的底层函数(系统调用)。

  • open:打开文件或设备
  • read:从打开的文件或设备里读数据
  • write:向文件或设备写数据
  • close:关闭文件或设备
  • ioctl:把控制信息传递给设备驱动程序。

可以直接用系统调用 open()、read()、close()来实现文件的操作,绕过glibc的fopen、fread、fclose

2.库函数

针对底层硬件的输入输出,频繁的使用系统调用效率会非常低,原因在于:

  • 操作系统需要频繁的从 用户态 切换到 内核态,减少这种开销的一个好方法是,在程序中尽量减少系统调用的次数,并且让每次系统调用完成尽可能多的工作。
  • 硬件本身的特性决定,例如,磁带机通常一次能写的数据块长度是10k。所以,如果你试图写的数据量不是10k的整数倍,磁带机还是会以10k为单位卷绕磁带,从而在磁带上留下了空隙。

需要运行库的原因除了刚刚讲的效率低问题,还有一个就是有了标准库,会更方便上层的开发:

  • 使用简便。运行库本身就是语言级别,一般相对设计比较友好;
  • 形式统一。运行库有自身的标准,是相互兼容的,这个不会随着操作系统或者编译器的变化而变化,例如在windows上和在Linux上都是fread()函数;

因此为了给设备和磁盘文件提供更高层的接口,Linux发行版(和UNIX)提供了一系列的标准函数库
它们是一些由函数构成的集合,你可以把它们应用到自己的程序中,比如提供输出缓冲功能的标准I/O库
你可以高效地写任意长度的数据块,库函数则在数据满足数据块长度要求时安排执行底层系统调用。这就极大降低了系统调用的开销。
以下就是常用的标准I/O库函数

  • fopen、fclose
  • fread、fwrite
  • fflush
  • fseek
  • fgetc、getc、getchar
  • fputc、putc、putchar
  • fgets、gets
  • printf、fprintf和sprintf
  • scanf、fscanf和sscanf

2.1 C语言的运行库

任何一个C应用程序,背后都需要庞大的代码来进行支撑,使得该程序能够正常运行。这样的代码集合被称为 运行时库(runtime library),而C语言的运行库,被称为CRT(C运行库)。
一个C的运行库大致包含以下功能:

  • 启动和退出:包含入口函数以及入口函数所依赖的部分;
  • 标准函数:C语言标准库的函数实现;
  • I/O:I/O功能的封装和实现
  • 堆:堆的实现
  • 语言实现:语言中一些特殊功能的时间
  • 调试功能

glibc
glibc是GNU C library,是GNU旗下的C标准
glibc的发布版本主要有两部分构成

  • 一部分是头文件,例如 stdio.h/ stdlib.h等
  • 另一部分是库的二进制文件部分,libc.so以及libc.a等

3.shell

shell是一个用户可以跟操作系统交互的可视化终端,它允许用户向操作系统输入需要执行的命令,这点与Windows的命令提示符类似,但是功能更为强大。
在Linux中安装多个shell是完全可行的,用户可以挑选一种自己喜欢的shell来使用。
下图显示了shell(实际上是两种shell:bash和csh)和其他程序环绕在Linux内核的四周。
在Linux系统中,默认总是作为/bin/sh安装的标准shell是GNU工具集中的bash(GNU Bourne-Again Shell)。

unix环境高级编程——UNIX体系架构相关推荐

  1. 5w字总结 Unix系统编程学习笔记(面试向)(Unix环境高级编程/Unix环境程序设计)

    文章目录 一.计算 C语言的数据表示与处理 计算 C语言的基本运算操作 内存表和符号表 类型转换 函数类型的分析 指令 复合指令 句法 函数 函数激活(Activation Record) 函数激活定 ...

  2. UNIX环境高级编程 - UNIX基础知识

    所有操作系统都为运行在它之上的程序提供各种服务,典型的服务包括:执行新程序.打开文件.读写文件.分配存储空间.提供时间等. UNIX体系结构 严格来说,操作系统是一种软件,它控制计算机硬件资源,提供程 ...

  3. 《UNIX 环境高级编程》学习笔记——UNIX 基础知识

    UNIX环境高级编程--UNIX 基础知识 引言 UNIX 体系结构 登录 文件和目录 输入和输出 程序和进程 出错处理 用户标识 信号 时间值 系统调用和库函数 引言 所有操作系统都为它们所允许的程 ...

  4. [阅读体会] UNIX环境高级编程

    文章目录 写在开始阅读前 (我会的知识点,在体会里是不提的,并不是书中没有,这里着重于记录我之前不会的,但读过书之后学会的.) 第一章 第二章 2.1 引言 2.2 UNIX标准化 2.2.1 ISO ...

  5. Unix环境高级编程 笔记

    Unix环境高级编程(第二版)学习笔记 这是一次较长时间的整理,然而跳跃了一些章节和很多知识点,仍然是很不完善很不全面的. 前言 操作系统某些问题 严格意义上,可将操作系统定义为一种软件,它控制计算机 ...

  6. 《UNIX环境高级编程(第3版)》——1.7 出错处理

    本节书摘来自异步社区<UNIX环境高级编程(第3版)>一书中的第1章,第1.7节,作者:[美]W. Richard Stevens , Stephen A.Rago著,更多章节内容可以访问 ...

  7. unix环境高级编程 pdf_UNIX系统编程宝典,每一本都值得程序员珍藏

    这几本UNIX系统编程宝典,重印无数次,几代程序员都视如珍宝的几本书,小编在出版圈里快十年了,见证了这本书图灵版.异步社区版的出版.营销,对这套书倾注了一定的感情.今天继续分享给你们,好书总会有人还不 ...

  8. 开发日记-20190827 关键词 读书笔记《Unix环境高级编程(第二版)》DAY 3

    Referred Blogs 文件描述符标志,文件状态标志 Linux中文件描述符fd和文件指针flip的理解 Linux编程–文件描述符fd 文件共享 Unix支持在不同进程间共享文件. 内核使用了 ...

  9. 开发日记-20190822 关键词 读书笔记《Unix环境高级编程(第二版)》《掌控习惯》DAY 2

    Preface 话说,昨天开始尝试着去改变自己,从基础的习惯开始,11:30准时睡觉,平时差不多12:30才睡觉.按理说,比平时早了一个小时睡觉吧,然后我就把闹钟提前了45分钟,想着还能比平常多睡15 ...

  10. apue.h头文件(UNIX环境高级编程)

    相信非常多初学<UNIX环境高级编程>的朋友都会遇到一个问题,执行里面的实例(download: http://www.apuebook.com/ )时就出现故障,提示 "错误: ...

最新文章

  1. SAP MM 明明有维护源清单,还是不能下PO?
  2. Windows学习总结(3)——成为电脑高手必备的cmd命令大全
  3. POJ 3436 -- ACM Computer Factory(最大流,建图)
  4. Android library projects cannot be launched问题的解决
  5. innerHTML的用法
  6. mysql断开同步并记录位置_数据库同步自动断开问题的处理
  7. SAGAN原理及代码(B站详解,很值得一看)
  8. 初学Java必须知道的几件事
  9. flash mx拖拽实例_Flash MX 2004 Professional的百叶窗过渡效果
  10. pyhon爬虫—爬取原创力文档(全面解析)
  11. 分享个一拳超人辅助脚本,自动挂机刷金币/经验/副本工具
  12. MacOS查看DNS服务器地址
  13. 计算机sid 用户sid,win10系统怎么生成新的SID号
  14. hazy的leetcode刷题笔记(五)
  15. 钉钉H5应用后台回调地址设置(服务端代码逻辑编写).NetCore API
  16. 为什么90%的IT人员都不适合做老大?
  17. 浙江省CIO峰会|数据安全+数字化转型,美创特色实践获“年度数字化赋能服务商”
  18. vscode 单击跳转_vscode中ctrl+鼠标左键不能跳转_编程开发工具
  19. 苹果手机怎么解屏幕锁_小米手机刷机第1步:解BL锁教程
  20. 济宁市计算机技能大赛,技能大赛做“试金石”,济宁市技师学院培养一流人才...

热门文章

  1. 中国厨房垃圾处理器(厨余粉碎机)行业深度调研与投资前景分析报告2022-2028年版
  2. php+mysql 图书管理系统源码AfireHong
  3. avast6.0网络安全软件破解至2050年_avast激活码_avast有效激活
  4. 好用的局域网共享工具有哪些?win10系统如何设置?
  5. Ke模拟器kemulator 1.0 绿色中文版
  6. Java使用ODBC连接Access数据库
  7. 想要给视频去色有什么方法?原来用这个就可以了
  8. 我的世界java8u101_jre8下载 Java SE Runtime Environment 8 9.0u101 多语言安装版 下载-脚本之家...
  9. 猴子吃桃问题java思路_java编程题猴子吃桃问题答案
  10. 计算机的工作原理机电原理,机电控制系统原理及工程应用