Linux文件系统与文件设备
字符设备与块设备良好的"一切都是文件"的设计思想。掌握Linux文件系统,设备文件系统的知识。
首先,驱动最终通过与文件操作相关的系统调用或C库函数(本质也是基于系统调用)被访问。而设备驱动结构
最终也是为了迎合提供给应用程序员的API。
驱动不可避免地会与设备文件系统打交道。
Linux文件操作
文件操作系统调用
文件操作系统调用(Windows中,习惯称操作系统提供的接口为API),涉及创建,打开,读写和关闭。
创建:
int creat(const char *filename,mode_t mode);
参数mode指定新文件的存取权限,和umask最终决定权限。
打开
int open(const char *pathname, int flags);
flag可以是一个值或者几个值的组合。
O_RDONLY 只读
O_WRONLY 只写
O_EDWR 读写
O_APPEND 追加
O_CREAT 创建
O_EXEC 如果使用了O_CREAT并且文件已经存在,发生错误
O_NOBLOCK 非阻塞的方式
O_TRIUNC 文件已经存在,删除文件的内容
int open(const char *pathname,int flags,mode_t mode);
同样可以使用自己的数字来表示。打开成功则返回文件描述符。以后对文件的描述可以通过文件描述符进行操
作来实现。
读写
在文件打开以后,我们才可以对文件进行读写。
int read(int fd,const void *buf,size_t length);
int write(int fd,const void *buf,size_t length);
定位
对于随机文件,我们可以随机指定位置进行读写,函数
int lseek(int fd,offset_t offset,int whence); //相对whence移动offset字节,操作成功返回文件指针相
对文件头的位置。
由于lseek函数的返回值为文件指针相对于文件头的位置,下面函数的返回值就是文件的长度。
lseek(fd,0,SEEK_END);
关闭
操作完成以后,要关闭文件,此时要调用close。
int close(int fd);
C库文件操作
C库函数的文件操作实际上独立于具体的操作系统平台。
读写
C库函数支持以字符,字符串等为单位进行文件的读写,一组函数为:
int fgetc(FILE *stream);
int fputc(int c,FILE *stream);
...
Linux文件系统
/bin
包含基本命令,如ls,cp,mkdir
/sbin
包含系统命令,modprobe,hwclock,ifconfig,大多是涉及系统管理的命令,目录中的文件都是可执行的
/dev
设备文件存储目录,应用程序通过对这些文件的读写和控制以访问实际的设备
/etc
系统配置文件的所在地,一些服务器的配置文件也在这里,如用户账户及密码配置文件。busybox的启动脚本
也在其中。
/lib
库系统文件存放目录
/mnt
存放挂载存储设备的挂载目录
/opt
可选的意思,有一些软件包会被安装在这里。
/proc
操作系统运行时,进程及内核信息(比如CPU,硬盘分区,内存信息)存放在这里,/proc目录为伪文件系统,
proc并不是真正的文件系统,它存在于内存之中。
/tmp
用户运行程序的时候,有时会产生临时文件。
/usr
系统存放程序的目录。
/sys
2.6以后的内核所支持的sysfs文件系统都被映射到此目录上,Linux设备驱动模型中的总线、驱动和设备都可以在sysfs
文件系统中找到对应的节点。当内核检测到在系统中出现了新设备以后,内核在sysfs文件系统中为该新设备生成一项新的
记录。
今天到这里,爱你,叶铮
字符设备与块设备良好的"一切都是文件"的设计思想。掌握Linux文件系统,设备文件系统的知识。
首先,驱动最终通过与文件操作相关的系统调用或C库函数(本质也是基于系统调用)被访问。而设备驱动结构
最终也是为了迎合提供给应用程序员的API。
驱动不可避免地会与设备文件系统打交道。
Linux文件操作
文件操作系统调用
文件操作系统调用(Windows中,习惯称操作系统提供的接口为API),涉及创建,打开,读写和关闭。
创建:
int creat(const char *filename,mode_t mode);
参数mode指定新文件的存取权限,和umask最终决定权限。
打开
int open(const char *pathname, int flags);
flag可以是一个值或者几个值的组合。
O_RDONLY 只读
O_WRONLY 只写
O_EDWR 读写
O_APPEND 追加
O_CREAT 创建
O_EXEC 如果使用了O_CREAT并且文件已经存在,发生错误
O_NOBLOCK 非阻塞的方式
O_TRIUNC 文件已经存在,删除文件的内容
int open(const char *pathname,int flags,mode_t mode);
同样可以使用自己的数字来表示。打开成功则返回文件描述符。以后对文件的描述可以通过文件描述符进行操
作来实现。
读写
在文件打开以后,我们才可以对文件进行读写。
int read(int fd,const void *buf,size_t length);
int write(int fd,const void *buf,size_t length);
定位
对于随机文件,我们可以随机指定位置进行读写,函数
int lseek(int fd,offset_t offset,int whence); //相对whence移动offset字节,操作成功返回文件指针相
对文件头的位置。
由于lseek函数的返回值为文件指针相对于文件头的位置,下面函数的返回值就是文件的长度。
lseek(fd,0,SEEK_END);
关闭
操作完成以后,要关闭文件,此时要调用close。
int close(int fd);
C库文件操作
C库函数的文件操作实际上独立于具体的操作系统平台。
读写
C库函数支持以字符,字符串等为单位进行文件的读写,一组函数为:
int fgetc(FILE *stream);
int fputc(int c,FILE *stream);
...
Linux文件系统
/bin
包含基本命令,如ls,cp,mkdir
/sbin
包含系统命令,modprobe,hwclock,ifconfig,大多是涉及系统管理的命令,目录中的文件都是可执行的
/dev
设备文件存储目录,应用程序通过对这些文件的读写和控制以访问实际的设备
/etc
系统配置文件的所在地,一些服务器的配置文件也在这里,如用户账户及密码配置文件。busybox的启动脚本
也在其中。
/lib
库系统文件存放目录
/mnt
存放挂载存储设备的挂载目录
/opt
可选的意思,有一些软件包会被安装在这里。
/proc
操作系统运行时,进程及内核信息(比如CPU,硬盘分区,内存信息)存放在这里,/proc目录为伪文件系统,
proc并不是真正的文件系统,它存在于内存之中。
/tmp
用户运行程序的时候,有时会产生临时文件。
/usr
系统存放程序的目录。
/sys
2.6以后的内核所支持的sysfs文件系统都被映射到此目录上,Linux设备驱动模型中的总线、驱动和设备都可以在sysfs
文件系统中找到对应的节点。当内核检测到在系统中出现了新设备以后,内核在sysfs文件系统中为该新设备生成一项新的
记录。
今天到这里,爱你,叶铮