日期:2014-05-16  浏览次数:20637 次

请问一个格式化输出问题
语句大概是这样:

DIR   *dir;
struct   dirent   *entry;

while((entry   =   readdir(dir))   !=   NULL)
{
.......
}

当中entry   =   readdir(dir)是不是返回参数dir目录流的下个目录进入点,从而形成循环?如果不是这样解释,应该怎么来解释这个循环语句里的条件呢?谢谢

------解决方案--------------------
readdir(dir)是从一个目录项流里读取一个目录项,并使流指针指向下一个目录项.
文件或目录是根据目录项内内容来判断的.这个目录项是文件还是目录,还是设备,链接等等,都由该目录项
内的一个数据位来标识.

这和你使用fgets读去一行数据一样.在读取后你并不知道数据的内容是什么,而是要等分析后此能知道.

文件系统的的结构:
目录也是一种特殊的文件,文件内有一个一个的记录,其记录就是目录项.
找文件时,先找到文件的目录项,再从目录项内找到文件的inode,inode是和文件一一对应的,记录了文件的
大小,位置等信息.但目录项和inode不是一一对应的,有可能几个目录项对应一个inode.如链接文件.它只是启目录项指向另一个文件的inode而已.

该目录项也有可能是目录,如果是目录,指向的是另一个目录文件的inode.

也有文件只有目录项而没有实际指向的inode,如无名管道.