1.1.linux系统
Linux的基本思想有两点:第一,一切皆是文件;第二,每个文件都有确定的用途。
其中第一条详细来讲就是系统中的所有都归结为一个文件,包括命令、硬件和软件设备、操作系统、进程等等。第二条,意思是对于操作系统内核而言,每种不同的文件需要表现它拥有各自特性或类型。
1.2.文件类型
ls -al
七种文件类型:
常规文件 -
文本文件、二进制文件、可执行文件、汇编文件等
目录文件 d
俗称文件夹
字符设备文件 c
块设备文件 b
硬件驱动操作硬件,通过设备文件调用(块设备、字符设备),设备文件在/dev路径下
管道文件 p
套接字文件 s
进程间通信方式,通常是以二进制读写文件方式传输消息。
符号链接文件 l(只了解)

1.3.系统调用
1.系统调用是什么?
应用程序与系统内核的关系:应用程序与操作系统不直接进行“交互”,操作系统提供系统调用,供用户态程序请求操作系统服务的一种机制。是操作系统与应用程序的“媒介”。

(1).保护核心程序、数据。
(2).屏蔽底层差异(系统、汇编指令等)
先将要执行的系统调用编号、所需的参数,设置到相关寄存器里,最后再使用syscall汇编指令,告诉cpu进入到内核态,开始执行请求的服务(系统调用)。
在各种编程语言中,我们并不需要使用汇编方式来执行请求的服务,编程语言为我们已经封装成对应的系统调用函数接口(方法),简称API。
(从上图接触到 系统调用、库函数、应用编程这些概念,后续课程会在适当的环节展开讲解,这里不详细赘述。)
2.系统调用具体有什么?

1.4.什么是IO
l/O 接口是设备与系统之间的桥梁。
我们简单的从物理与抽象的角度区分,将嵌入式I/O(Input/Output)的理解为IO设备和IO接口函数两个部分。
所谓的 IO设备——具体的可以实现“输入输出”效果的硬件:
I input 输入设备,比如键盘、鼠标
O output 输出设备,比如显示器
例如:U盘,网口,既是输入也是输出IO接口函数——专用协议,常规操作接口:
IO接口实现的主要功能作用包括数据传输、信号转换、设备控制。
IO接口的应用场景涉及的类型、范围广泛,使得系统、硬件之间的应用编程更便捷高效。本课程我们用C语言编程的方式,了解常见的IO接口函数。
用编程操作文件、文件夹的方式实践学习,从而带领大家入门应用编程,窥探应用编程与硬件、系统的关系。
1.5.库函数
为什么学习库函数?

一些IO接口的实现,直接与硬件设备、系统内核密切相关,例如系统调用函数;
一些IO接口的实现侧重屏蔽底层差异,提供兼容性更广的应用编程的数据交换方法(接口),例如C库函数。
【名词总结】
1.系统调用:
普通的应用程序在用户空间运行,总是需要可以和内核空间之间交换数据。一些I/O操作的指令都被限制在只有内核模式可以执行,为了操作系统的安全问题,操作系统有必要提供 封装了系统调用的接口函数 来为应用程序提供诸如读取磁盘某位置的数据的功能,这些接口就被称为系统调用函数,简称系统调用(System calls)。
系统调用使得用户空间可以和内核空间之间安全的交换数据,也使得运行中系统是安全与稳定的。
系统调用大多和硬件、内核版本强耦合,这同时就给程序的可移植性带来了阻碍。
2. 库函数:
如果我们把系统调用封装成抽象的功能函数,就可以起到隔离保护的作用。库函数(Library function)是在函数内部调用该系统的系统调用接口,并封装入库供用户使用的应用编程接口函数。
库函数的优点在于提高了代码的复用性和可维护性。通过使用现成的库函数,程序员可以避免重复编写相同的代码,同时也能确保代码的正确性、安全性和可移植性。例如,printf就是库函数,然后调用了系统调用才在指定的显示器上显示字符。
3. 应用编程接口函数:
简称API(Application Programming Interface),封装一些常见的编程操作、系统调用的应用层函数。