标签: Linux系统编程
Linux下系统编程是什么?
程序员使用系统调用或c语言本身所携带的库函数来设计和编写具有某一特定功能的程序,就为系统编程。(比如下文中我自己写的my_chmod指令)
系统调用是什么?
系统调用是操作系统提供给程序员使用的接口,(如作为系统调用提供的open函数用于打开一个文件,又如c语言的函数库也是系统调用实现的,只不过它封装了系统调用,并在此基础上为方便程序员使用增加了一节功能)
如何使用系统调用
Linux为上层应用的开发提供了丰富的系统调用,应用程序只需包含相应的头文件(如 #include < sys/stat.h >等等)就可以使用这些函数啦。
注意:可通过 “ man ×××× ”查看想要用的函数原型 ,如果既是Linux命令,又是系统调用,输入 “ man 2 ×××× “,对于库函数,则输入man 3 <库函数名>
系统调用的的一个实例应用
具体见我的另一篇博客 https://www.zybuluo.com/okokme/note/1225185
Linux的文件结构
Linux是以文件为基础 设计的,程序员可以通过系统调用或c语言的库函数对文件进行操作。
文件主要包含: ①文件本身所包含的数据②文件的属性
注意:目录也是一种文件,称为目录文件哦。
一般Linux下 有如下目录和具体功能:
详情见我的另一篇博客哦 https://blog.csdn.net/kkkkde/article/details/81171933
Linux的文件系统模型
操作系统通过文件系统可以方便地对磁盘上的文件进行管理。
数据,或者说是文件归根结底是要存储在物理磁盘上的。
对物理磁盘上的访问都是通过设备驱动程序来进行的。
对设备驱动的访问有以下两种方式: ①通过设备本身提供的接口 ②通过虚拟文件系统(Virtual File System,VFS)提供给上层应用程序的接口。
因为第一种方式能够让用户进程绕过文件系统而直接读写磁盘上的内容,给操作系统带来了很大的不稳定性,所以大部分操作系统包括Linux都是使用虚拟文件系统来访问设备驱动。
关于VFS:
1.VFS是虚拟的,是只存在于内存而不存在于磁盘之中的(只有系统运行起来后才存在)。
2.VFS提供一种机制,他将各种不同的文件系统(eg:EXT2,EXT3,vfat等)整合起来,并提供统一的应用程序编程接口(API)供上层的应用程序使用。
文件系统是由一系列块(block)构成的,每个块的大小的因不同的文件系统而不同,但是一个文件系统一旦安装之后,块的大小固定。
通常一个块的大小是一个扇区的大小,而一个扇区通常为512个字节。
注意:每次对物理磁盘的访问最小单位是一个盘面上的一个磁盘上的一个扇区,即使用户只需要访问1个字节的数据,实际读写都是都是先把该字节所在的扇区读入到内存,然后再进行访问。