Linux扫描目录

相关函数:scandir, opendir, readdir, alphasort
表头文件:#include  <dirent.h>
定 义函数:int  scandir(const char *dir, struct dirent **namelist, nt (*select)  (const  struct  dirent *), nt (*compar)  (const struct dirent **, const struct dirent**));
函数说明:scandir()会扫描参数dir指定的目录文件,经由参 数select指定的函数来挑选目录结构至参数namelist数组中,最后再调用参数compar指定的函数来排序namelist数组中的目录数据。 每次从目录文件中读取一个目录结构后便将此结构传给参数select所指的函数, select函数若不想要将此目录结构复制到namelist数组就返回0,若select为空指针则代表选择所有的目录结构。scandir()会调用 qsort()来排序数据,参数compar则为qsort()的参数,若是要排列目录名称字母则可使用alphasort(). 结构dirent定义请参考readdir()
返回值  :成功则返回复制到namelist数组中的数据结构数目,有错误发生则返回-1
错误代码:ENOMEM 核心内存不足

/* 读取 / 目录下文件名长度大于5的目录结构 */
#include <dirent.h>

int select(const struct dirent *dir)
{
if(strlen(dir->d_name) > 5)
return 1;
else
return 0;
}

main()
{
struct dirent **namelist;
int i, total;
if(total < 0)
perror("scandir");
else
{
for(i=0; i<total; i++)
printf("%s\n", namelist->d_name);
           printf("total = %d\n", total);

           free( namelist );
}
}


--------------------------------------------------------------------------
struct dirent 目录路径定义:
#include <dirent.h>
struct dirent
{
long d_ino; /* inode number 索引节点号 */
off_t d_off; /* offset to this dirent 在目录文件中的偏移 */
unsigned short d_reclen; /* length of this d_name 文件名长 */
unsigned char d_type; /* the type of d_name 文件类型 */
char d_name [NAME_MAX+1]; /* file name (null-terminated) 文件名,最长255字符 */
}

 

下面是更详细的定义,摘自:

http://www.delorie.com/gnu/docs/glibc/libc_270.html

This is a structure type used to return information about directory entries. It contains the following fields:

char d_name[]
This is the null-terminated file name component. This is the only field you can count on in all POSIX systems.
ino_t d_fileno
This is the file serial number. For BSD compatibility, you can also refer to this member as d_ino. In the GNU system and most POSIX systems, for most files this the same as the st_ino member that stat will return for the file. See section 14.9 File Attributes.
unsigned char d_namlen
This is the length of the file name, not including the terminating null character. Its type is unsigned char because that is the integer type of the appropriate size
unsigned char d_type
This is the type of the file, possibly unknown. The following constants are defined for its value:
DT_UNKNOWN
The type is unknown. On some systems this is the only value returned.

DT_REG
A regular file.

DT_DIR
A directory.

DT_FIFO
A named pipe, or FIFO. See section 15.3 FIFO Special Files.

DT_SOCK
A local-domain socket.

DT_CHR
A character device.

DT_BLK
A block device.

This member is a BSD extension. The symbol _DIRENT_HAVE_D_TYPE is defined if this member is available. On systems where it is used, it corresponds to the file type bits in the st_mode member of struct statbuf. If the value cannot be determine the member value is DT_UNKNOWN. These two macros convert between d_type values and st_mode values:

Function: int IFTODT (mode_t mode)
This returns the d_type value corresponding to mode.

Function: mode_t DTTOIF (int dtype)
This returns the st_mode value corresponding to dtype.

This structure may contain additional members in the future. Their availability is always announced in the compilation environment by a macro names _DIRENT_HAVE_D_xxx where xxx is replaced by the name of the new member. For instance, the member d_reclen available on some systems is announced through the macro _DIRENT_HAVE_D_RECLEN.

When a file has multiple names, each name has its own directory entry. The only way you can tell that the directory entries belong to a single file is that they have the same value for the d_fileno field.

 

转载于:https://www.cnblogs.com/flyxiang2010/archive/2010/12/17/1909035.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值