Linux--基础篇--DIR dirent stat

Linux下 DIR结构体定义为

 1 struct __dirstream
 2    {
 3     void *__fd;
 4     char *__data;
 5     int __entry_data;
 6     char *__ptr;
 7     int __entry_ptr;
 8     size_t __allocation;
 9     size_t __size;
10     __libc_lock_define (, __lock)
11    };
12 typedef struct __dirstream DIR;

该结构体保存目录相关的信息,比如opendir(const char *);返回的就是DIR * 的类型;

用到该结构体的函数还有:

1 struct dirent *readdir(DIR *dp);
2 void rewinddir(DIR *dp);
3 int closedir(DIR *dp);
4 long telldir(DIR *dp);
5 void seekdir(DIR *dp,long loc);

得到DIR * 后,传给readdir(DIR *)函数 就可以得到dirent类型的指针 dirent结构体不仅保存了目录信息,还保存了某个文件的具体信息

dirent 结构体定义为

1 struct dirent
2 {
3   long d_ino; /* inode number 索引节点号 */
4     off_t d_off; /* offset to this dirent 在目录文件中的偏移 */
5     unsigned short d_reclen; /* length of this d_name 文件名长 */
6     unsigned char d_type; /* the type of d_name 文件类型 */
7     char d_name [NAME_MAX+1]; /* file name (null-terminated) 文件名,最长255字符 */
8 }

通过dirent 的d_name 借助下面这个函数

int stat(const char *file_name, struct stat *buf);

可以得到某个文件更详细的信息;也就可以实现linux中ls的功能了

stat结构体的定义为

 1 struct stat {
 2         mode_t     st_mode;       //文件访问权限
 3         ino_t      st_ino;       //索引节点号
 4         dev_t      st_dev;        //文件使用的设备号
 5         dev_t      st_rdev;       //设备文件的设备号
 6         nlink_t    st_nlink;      //文件的硬连接数
 7         uid_t      st_uid;        //所有者用户识别号
 8         gid_t      st_gid;        //组识别号
 9         off_t      st_size;       //以字节为单位的文件容量
10         time_t     st_atime;      //最后一次访问该文件的时间
11         time_t     st_mtime;      //最后一次修改该文件的时间
12         time_t     st_ctime;      //最后一次改变该文件状态的时间
13         blksize_t st_blksize;    //包含该文件的磁盘块的大小
14         blkcnt_t   st_blocks;     //该文件所占的磁盘块
15       };

这里给出一个ls的简单实现(查考UNIX 环境高级编程):

查考:http://www.liweifan.com/2012/05/13/linux-system-function-files-operation/

时间: 2024-07-31 14:31:32

Linux--基础篇--DIR dirent stat的相关文章

Linux基础篇--linux基础和帮助用法

Linux基础篇--linux基础和帮助用法 本章概要 用户登录 终端 Shell介绍 执行命令 简单命令 Tab键补全 命令行历史 bash快捷键 使用gnome-terminal whatis command--help manandinfo 本地帮助文档/usr/share/doc/ 官网在线文档 其它网站和搜索 用户登录 root用户   一个特殊的管理帐户   也被称为超级用户   root已接近完整的系统控制   对系统损害几乎有无限的能力   除非必要,不要登录为root 普通用户

Linux基础篇和服务器篇教程

基础篇 服务器篇 视频内容很详细,看完后就是中级攻城师了!!! 视频内容很详细,看完后就是中级攻城师了!!! 视频内容很详细,看完后就是中级攻城师了!!! 如有需要留言邮箱!!!记得推荐文章,让跟多的人看到!! 如有需要留言邮箱!!!记得推荐文章,让跟多的人看到!! 如有需要留言邮箱!!!记得推荐文章,让跟多的人看到!!

Linux基础篇之二系统redhat 6.4的安装

Linux的安装说明 本文主要介绍Linux的安装. 本文以redhat 6.4为例 : 大家也可以安装下载CentOS,CentOS就是从redhat基础上衍生出来的,安装方法大同小异. Redhat 6.4种子镜像: ed2k://|file|[%E7%BA%A2%E5%B8%BD%E4%BC%81%E4%B8%9ALinux.6.4.%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%89%88].rhel-server-6.4-x86_64-dvd[ED2000.COM].is

Linux基础篇之五基础命令 ---- 2

回顾: 上一篇博文我们讲的是几个处理目录类的常用命令,分别是ls, cd, pwd, mkdir, rmdir, cp, rm  链接:http://ccschan.blog.51cto.com/11854461/1841723 本文主要讲文件查看类的命令,在linux中,这些命令是最基本的,也是必须掌握的. 文件查看类命令,主要有以下几个: ·cat    由第一行开始显示文件内容 ·tac     由最后一行开始逆序显示文件内容,同tac命令是倒着写的 ·nl     显示的时候,顺道输出行

Linux基础篇之五基础命令 ----1

本文主要介绍处理目录的常用命令,并且对每个命令及参数一一举例说明. 处理目录的常见命令有: ·ls    list,列出指定目录下的内容 ·cd    Change Directory,更改目录 ·pwd    Print Working Directory,查看当前工作目录的完整的绝对路径 ·mkdir   Make Directory,创建空目录 ·rmdir   Remove Directory,移除空目录 ·rm    Remove,移除文件和目录 ·cp     Copy,复制:遵从一

linux基础篇(磁盘分区)

       linux磁盘分区到文件系统创建 首先了解磁盘的基本构造 需要用到的分区命令: fdisk:对于一块硬盘来讲,最多只能管理15分区 语法:fdisk  [OPTION][DEVICE] p: print, 显示已有分区     n: new, 创建     d:delete, 删除    w:write, 写入磁盘并退出 q: quit, 放弃更新并退出   m: 获取帮助      l: 列表所分区id     t: 调整分区id 开始进行磁盘分区: 此处可以看到两块硬盘sda1

Linux基础篇之内存管理机制

转载这篇文章之前,先区分下缓存和缓冲的区别, 缓冲和缓存都是RAM中的数据.简单来说,buffer是即将要写入磁盘的数据,而cache是从磁盘中读取数据的.buffer是由各种进程分配的,被用在如输入队列等方面,一个简单的例子如某个进程要求有多个字段读入,在所有字段 被读入完整之前,进程把先前读入的字段放在buffer中保存.cache经常被用在磁盘的I/O请求上,如果有多个进程都要访问某个文件,于是该文件便被做成cache以方便下次被访问,这样可以提高系统性能. 1 Linux内存管理的主要特

Linux基础篇 进程通信——管道

IPC(InterProcess Communication)进程间通信 每个进程各?自有不同的?用户地址空间,任何?一个进程的全局变量在另?一个进程中都看不到所以进 程之间要交换数据必须通过内核,在内核中开辟?一块缓冲区,进程1把数据从?用户空间拷到内核缓 冲区,进程2再从内核缓冲区把数据读?走,内核提供的这种机制称为进程间通信. linux下进程间通信的几种主要?手段简介: 1 管道(Pipe)及有名管道(named pipe):管道可?用于具有亲缘关系进程间的通信,有名管道克服了管道没有名

linux基础篇(二)VM安装linux操作系统

此篇开始有些内容就需要到linux系统内部实践了,只有自己动手操作才能学会和记住.网上有很多安装VM虚拟机和linux操作系统的教材,推荐<linux就该这样学>,安装linux的操作系统推荐redhat 和 centOS.安装过程建议先使用VM虚拟机安装学习,安装过程也很简单.多的我就不罗嗦了,网上资料实在是太多了,这个也实在是太简单了.注意以下几个图就好了.1.建议使用英文的键盘和英文的语言支持,以后的运用总基本上都是用的英文版的,这让你更熟悉和便利很多.在选择software selec