1,文件类型
linux 文件可以分6类,普通文件(按内部结构可分为:文本文件,二进制文件),目录文件,链接文件,设备文件(根据访问数据方式的不同可分为: 块设备文件,字符设备文件),管道文件(主要用于不同进程间的信息传递),套接字(socket) 文件(该文件类型与网络通信有关)。
2,文件的相关信息
文件目录结构:
系统每个目录都处于一定的目录结构中,该结构含有目录中所有的目录项的列表。每个目录项都含有一个名称和索引节点。
索引节点:
linux中所有文件都有一个与之相连的索引节点(inode)。索引节点是用来保存文件信息的,包含以下信息:
*文件使用的设备号
*索引节点号
* 文件的字节数
* 文件拥有者的User ID
* 文件的Group ID
* 文件的读、写、执行权限
* 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。
* 链接数,即有多少文件名指向这个inode
* 文件数据block的位置
系统定义了stat结构体来存放这些信息
struct stat {dev_t st_dev; /* ID of device containing file */
ino_t st_ino; /* inode number */
mode_t st_mode; /* protection */
nlink_t st_nlink; /* number of hard links */
uid_t st_uid; /* user ID of owner */
gid_t st_gid; /* group ID of owner */
dev_t st_rdev; /* device ID (if special file) */
off_t st_size; /* total size, in bytes */
blksize_t st_blksize; /* blocksize for file system I/O */
blkcnt_t st_blocks; /* number of 512B blocks allocated */
time_t st_atime; /* time of last access */
time_t st_mtime; /* time of last modification */
time_t st_ctime; /* time of last status change */
};
st_dev 代表包含这个文件名和相应的索引节点的文件系统的设备号。st_rdev 则只有字符设备文件或块设备文件才具有,表示的是实际设备的设备号。
数据:
通常文件中包含一定的数据,普通文件和目录文件都有相应的硬盘区域存储数据。这些数据是存储在由索引节点指定的位置上的。而其他一些特殊文件,如设备文件等,并不具有这样的在硬盘上的存储区域。
虚拟文件系统VFS
linux支持的所有文件系统称为逻辑文件系统,而linux在传统的逻辑文件系统的基础上增加料一个蓄念文件系统( Vitual File System ,VFS) 的接口层。
虚拟文件系统(VFS) 位于文件系统的最上层,管理各种逻辑文件系统,并可以屏蔽各种逻辑文件系统之间的差异,提供统一文件和设备的访问接口。
读文件目录
#include <dirent.h> struct dirent *readdir(DIR *dirp);readdir() 函数返回一个代表目录 dirp 里下一个项目的指向dirent结构的指针。如果到达目录流结尾或出错它返回 NULL。
在 Linux 系统里,dirent 结构定义如下:
struct dirent { ino_t d_ino; /* inode number */ off_t d_off; /* 下一个项目的偏移 */ unsigned short d_reclen; /* 本记录的长度 */ unsigned char d_type; /* 文件类型;不是被所有文件系统支持 */ char d_name[256]; /* 文件名 */ };
如:
while((pdirent=readdir(pdir))!=NULL)
{
printf("%s\n",pent->d_name);
}
c == 优先级高于=