文件基础

文件基础

1.1.linux系统

Linux的基本思想有两点:第一,一切皆是文件;第二,每个文件都有确定的用途。

其中第一条详细来讲就是系统中的所有都归结为一个文件,包括命令硬件软件设备、操作系统进程等等。第二条,意思是对于操作系统内核而言,每种不同的文件需要表现它拥有各自特性或类型

1.2.文件类型

ls -al

七种文件类型:

  1. 常规文件 -

    文本文件、二进制文件、可执行文件、汇编文件等

  2. 目录文件 d

    俗称文件夹

  3. 字符设备文件 c

  4. 块设备文件 b

    硬件驱动操作硬件,通过设备文件调用(块设备、字符设备),设备文件在/dev路径下

  5. 管道文件 p

  6. 套接字文件 s

    进程间通信方式,通常是以二进制读写文件方式传输消息。

  7. 符号链接文件 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),封装一些常见的编程操作、系统调用的应用层函数。


Shell、时间、查看文件相关命令 2025-12-11
Conda常用命令 2026-02-25

评论区