linux 文件操作

本文介绍了Linux文件系统的六大类文件,包括普通文件、目录文件、链接文件等,并详细解释了索引节点(inode)的概念及其所包含的重要信息。同时,文章还探讨了虚拟文件系统(VFS)的作用及如何使用readdir函数读取目录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 == 优先级高于=


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值