Linux系统编程第14章-系统编程概念
2017-04-16 14:21
239 查看
1.设备文件:
Linux系统中每个设备都有设备驱动程序,是内核的一部分。由驱动程序提供的api是固定的,一般都包括open,close,read,write,mmap,ioctl等,这样可以保证IO借口的通用性。IOCTL可以提供对特定设备的特定操作,可以自己定义ioctl命令,来实现对设备的特殊操作。不管是真实的设备还是虚拟的设备,都有一样的设备驱动程序。设备驱动程序可以分为两类:字符型设备基于每个字符来处理数据。终端和键盘都属于字符型设备。块设备则每次处理一块数据。块大小取决于设备类型,通常为512字节的倍数,磁盘和磁带都属于块设备。设备名称位于/dev目录下。超级用户可以使用mknod命令来创建设备。设备ID:每个设备都有主辅ID号各一。主ID号标识一般的设备等级,内核会使用主ID号查找与该类设备相应的驱动程序。辅ID号能够在一般等级中确定唯一标识特定设备。ls -l命令可以显示设备文件的主辅ID号。
2.磁盘和分区:
可以将磁盘划分为一个或多个分区,内核则将各个分区视为位于/dev路径下的单独设备。可以使用fdisk命令来决定磁盘分区的编号,大小和类型。命令fdisk -l会列出磁盘上的所有分区。Linux特有的文件/proc/partitions记录了系统中每个磁盘分区的主辅设备编号,大小和名称。每个分区可以存放文件系统,数据区域或者交换区域。
3.文件系统:
利用mkfs命令创建文件系统。在文件系统中,用来分配空间的基本单位是逻辑块,一般为1024,2048,4096等字节。每个分区上可以建立一个文件系统,文件系统包括引导块,超级块,i节点表,数据块
引导块:文件系统的首块,不为文件系统所用,用来包含引导操作系统的信息。操作系统只需要一个引导块,但每个文件系统都有引导块,所以大部分文件系统的引导块没有被用到。
超级块:包含文件系统有关的信息,包括i节点表容量,文件系统逻辑块的大小,以逻辑块计,文件系统的大小。
i节点表:
文件系统中的每个文件或者目录在i节点表中都对应着唯一一条记录。记录了关乎文件的各种信息。
数据块:存放数据。
4.i节点:
i节点就是索引节点,每个文件都有一个i节点,文件系统的i节点表维护了很多i节点的信息。每个i节点都有一个i节点号,就是
ls -li命令所显示的第一列。
i节点维护的信息如下:
a.文件类型,比如常规文件,目录,符号链接,字符设备等。
b.文件属主,即UID
c.文件数组,即GID
d.3类用户的访问权限
e.3个时间戳,文件的最后访问时间,文件的最后修改时间,文件状态的最后改变时间。
f.指向文件的硬链接数量
g.文件的大小,字节为单位
h.实际分配的块数量,512字节为单位。因为文件可能有空洞,所以实际分配的数量可以小于文件大小。
i.指向文件数据块的指针(有一组指针,因为文件的数据存储的位置可能不是连续的。)
5.虚拟文件系统VFS
因为Linux支持多种文件系统,各种文件系统实现原理存在差异,所以在用户层和实际文件系统之间抽象了一层虚拟文件系统,定义一套通用的接口,然后用户层就通过通用的标准接口访问操作各种文件系统。
7.单根目录层级和挂载点
Linux上的文件系统都是单根目录系统,树根就是/,也就是根目录。
mount device directory 这个directory就是挂载点。
8.文件系统的挂载和卸载
系统调用mount()and umount()运行特权级进程可以挂载和卸载文件系统。/proc/mount可以查看已经挂载文件系统的列表。
mount和umount命令自动维护/etc/mtab文件的信息,里面的信息和mount信息差不多,只不过稍微详细一点,但是mount()和umount()系统调用不会维护该文件,所以造成和mount信息有出入。
/etc/fstab包含了对系统支持的所有文件系统的描述。
以上三个文件的内容格式相同,比如:
/dev/sda9 /boot ext3 rw 0 0
包含了六个字段,分别为 已挂载文件名,设备的挂载点,文件系统类型,挂载标志权限,一个数字,一个数字。
a.挂载文件的系统调用:
mountflags标志位参见P217 fstype是一个字符串,用来表示文件系统,比如ext4,btrfs等。source是设备名称,target是挂载点。
b.卸载文件系统:
9.高级挂载特性:
a.在多个挂载点挂载文件系统:
从内核2.4开始,一个文件系统可以同时挂载到多个位置。每个挂载点下显示的内容都是一样的,修个一个挂载点的内容,其他挂载点同样可见。
b.多次挂载同一挂载点
Linux允许针对同一挂载点执行多次挂载。每次的新挂载都会隐藏之前的挂载。卸载后,挂载点下上次的挂载就会显现。
c.绑定挂载:
绑定挂载有些类似于硬链接,就是将两个目录或文件绑定起来,在一个目录下的修改,在其绑定的目录下同样可见。可以跨越多个文件系统挂载点。绑定挂载也分递归和非递归,具体见P226
10.虚拟内存文件系统
LInux同样支持驻留于内存的文件系统,一般mount在/tmp目录下,如果没有,可以利用mount命令或者mount系统调用来挂载。
mount -t tmpfs newtmp /tmp
挂机或者系统崩溃,该目录下的所有数据将丢失。
14.获得与文件系统有关的信息
Linux系统中每个设备都有设备驱动程序,是内核的一部分。由驱动程序提供的api是固定的,一般都包括open,close,read,write,mmap,ioctl等,这样可以保证IO借口的通用性。IOCTL可以提供对特定设备的特定操作,可以自己定义ioctl命令,来实现对设备的特殊操作。不管是真实的设备还是虚拟的设备,都有一样的设备驱动程序。设备驱动程序可以分为两类:字符型设备基于每个字符来处理数据。终端和键盘都属于字符型设备。块设备则每次处理一块数据。块大小取决于设备类型,通常为512字节的倍数,磁盘和磁带都属于块设备。设备名称位于/dev目录下。超级用户可以使用mknod命令来创建设备。设备ID:每个设备都有主辅ID号各一。主ID号标识一般的设备等级,内核会使用主ID号查找与该类设备相应的驱动程序。辅ID号能够在一般等级中确定唯一标识特定设备。ls -l命令可以显示设备文件的主辅ID号。
2.磁盘和分区:
可以将磁盘划分为一个或多个分区,内核则将各个分区视为位于/dev路径下的单独设备。可以使用fdisk命令来决定磁盘分区的编号,大小和类型。命令fdisk -l会列出磁盘上的所有分区。Linux特有的文件/proc/partitions记录了系统中每个磁盘分区的主辅设备编号,大小和名称。每个分区可以存放文件系统,数据区域或者交换区域。
3.文件系统:
利用mkfs命令创建文件系统。在文件系统中,用来分配空间的基本单位是逻辑块,一般为1024,2048,4096等字节。每个分区上可以建立一个文件系统,文件系统包括引导块,超级块,i节点表,数据块
引导块:文件系统的首块,不为文件系统所用,用来包含引导操作系统的信息。操作系统只需要一个引导块,但每个文件系统都有引导块,所以大部分文件系统的引导块没有被用到。
超级块:包含文件系统有关的信息,包括i节点表容量,文件系统逻辑块的大小,以逻辑块计,文件系统的大小。
i节点表:
文件系统中的每个文件或者目录在i节点表中都对应着唯一一条记录。记录了关乎文件的各种信息。
数据块:存放数据。
4.i节点:
i节点就是索引节点,每个文件都有一个i节点,文件系统的i节点表维护了很多i节点的信息。每个i节点都有一个i节点号,就是
ls -li命令所显示的第一列。
i节点维护的信息如下:
a.文件类型,比如常规文件,目录,符号链接,字符设备等。
b.文件属主,即UID
c.文件数组,即GID
d.3类用户的访问权限
e.3个时间戳,文件的最后访问时间,文件的最后修改时间,文件状态的最后改变时间。
f.指向文件的硬链接数量
g.文件的大小,字节为单位
h.实际分配的块数量,512字节为单位。因为文件可能有空洞,所以实际分配的数量可以小于文件大小。
i.指向文件数据块的指针(有一组指针,因为文件的数据存储的位置可能不是连续的。)
5.虚拟文件系统VFS
因为Linux支持多种文件系统,各种文件系统实现原理存在差异,所以在用户层和实际文件系统之间抽象了一层虚拟文件系统,定义一套通用的接口,然后用户层就通过通用的标准接口访问操作各种文件系统。
7.单根目录层级和挂载点
Linux上的文件系统都是单根目录系统,树根就是/,也就是根目录。
mount device directory 这个directory就是挂载点。
8.文件系统的挂载和卸载
系统调用mount()and umount()运行特权级进程可以挂载和卸载文件系统。/proc/mount可以查看已经挂载文件系统的列表。
mount和umount命令自动维护/etc/mtab文件的信息,里面的信息和mount信息差不多,只不过稍微详细一点,但是mount()和umount()系统调用不会维护该文件,所以造成和mount信息有出入。
/etc/fstab包含了对系统支持的所有文件系统的描述。
以上三个文件的内容格式相同,比如:
/dev/sda9 /boot ext3 rw 0 0
包含了六个字段,分别为 已挂载文件名,设备的挂载点,文件系统类型,挂载标志权限,一个数字,一个数字。
a.挂载文件的系统调用:
#include<sys/mount.h> int mount(count char *source, const char *target, const char *fstype, unsinged long mountflags, const void *data);
mountflags标志位参见P217 fstype是一个字符串,用来表示文件系统,比如ext4,btrfs等。source是设备名称,target是挂载点。
b.卸载文件系统:
#include<sys/mount.h> int umount(const char *target)//target为文件系统的挂载点 int umount(const char *target, int flags);//umount系统调用的扩展,flags参数是一些位掩码组成。
9.高级挂载特性:
a.在多个挂载点挂载文件系统:
从内核2.4开始,一个文件系统可以同时挂载到多个位置。每个挂载点下显示的内容都是一样的,修个一个挂载点的内容,其他挂载点同样可见。
b.多次挂载同一挂载点
Linux允许针对同一挂载点执行多次挂载。每次的新挂载都会隐藏之前的挂载。卸载后,挂载点下上次的挂载就会显现。
c.绑定挂载:
绑定挂载有些类似于硬链接,就是将两个目录或文件绑定起来,在一个目录下的修改,在其绑定的目录下同样可见。可以跨越多个文件系统挂载点。绑定挂载也分递归和非递归,具体见P226
10.虚拟内存文件系统
LInux同样支持驻留于内存的文件系统,一般mount在/tmp目录下,如果没有,可以利用mount命令或者mount系统调用来挂载。
mount -t tmpfs newtmp /tmp
挂机或者系统崩溃,该目录下的所有数据将丢失。
14.获得与文件系统有关的信息
#include<sys/statvfs.h> int statvfs(const char *pathname, struct statvfs *statvfsbuf) int fstatvfs(int fd, strcut statvfs *statvfsbuf); P228
相关文章推荐
- (Michael Kerrisk)Linux系统编程手册读书笔记(一)-----系统编程概念中的函数解析
- Linux/Unix系统编程-基本概念
- 八、Linux系统编程-进程(一)进程概念、进程数据结构、进程状态变迁、进程创建和撤销
- Linux系统编程手册一 :Linux系统基本概念。
- Linux系统编程手册读书笔记——第3章 系统编程概念
- Linux系统进程控制编程(一)————基本概念和函数getpid的使用
- Linux系统编程之基本概念--学习笔记
- [linux] C语言Linux系统编程进程基本概念
- Linux系统编程---线程概念
- linux系统编程之基础必备(七):read/write函数与(非)阻塞I/O的概念
- Linux系统下的多线程编程入门二
- 基于Linux系统的Socket编程简单介绍
- linux嵌入式编程高手历程系列6-定制uboot和文件系统
- linux嵌入式编程高手历程系列8-NFS网络文件系统配置方法
- Linux系统下的多线程编程入门
- 【嵌入式Linux学习七步曲之第五篇 Linux内核及驱动编程】揭开Linux Proc文件系统的神秘面纱
- Linux系统进程控制编程(六)——wait和waitpid函数
- Linux编程常用的函数(十一) 系统数据文件和信息
- Linux下的C编程实战(二)――文件系统编程 推荐
- Linux系统下用Frame Buffer来做摄像头编程