C语言中的dirent.h说明

dirent.h是用于目录操作的头文件,linux 默认在/usr/include目录下(会自动包含其他文件),常见的方法如下:

1. opendir()

       打开目录,并返回句柄

2. readdir()

      读取句柄,返回dirent结构体

3. telldir()

     返回当前指针的位置,表示第几个元素

4. close()

    关闭句柄


不同平台下的dirent 结构体各异,如mac:

struct dirent {
        ino_t d_ino;                    /* file number of entry */
        __uint16_t d_reclen;            /* length of this record */
        __uint8_t  d_type;              /* file type, see below */
        __uint8_t  d_namlen;            /* length of string in d_name */
        char d_name[__DARWIN_MAXNAMLEN + 1];    /* name must be no longer than this */
};


其中:d_name表示文件名称, d_type表示文件类型,类型如下:


enum
  {
    DT_UNKNOWN = 0,
# define DT_UNKNOWN     DT_UNKNOWN
    DT_FIFO = 1,
# define DT_FIFO        DT_FIFO
    DT_CHR = 2,
# define DT_CHR         DT_CHR
    DT_DIR = 4,
# define DT_DIR         DT_DIR
    DT_BLK = 6,
# define DT_BLK         DT_BLK
    DT_REG = 8,
# define DT_REG         DT_REG
    DT_LNK = 10,
# define DT_LNK         DT_LNK
    DT_SOCK = 12,
# define DT_SOCK        DT_SOCK
    DT_WHT = 14
# define DT_WHT         DT_WHT
  };


范例代码如下:

/*
 ============================================================================
 Name        : hell_c.c
 Author      : yuancj
 Version     :
 Copyright   : Your copyright notice
 Description : Hello World in C, Ansi-style
 ============================================================================
 */
#include <stdio.h>
#include <stddef.h>
#include <dirent.h>


int main(int argc, char * argv[]) {
    DIR * dp;
    struct dirent * dirp;
    if (argc != 2) {
        printf("usage: ls directory_name");
    }

    if ( (dp = opendir(argv[1])) == NULL) {
        printf("can't open %s", argv[1]);
    }

    while ( (dirp = readdir(dp)) != NULL ) {
        printf("name:%s-type:%d-position:%ld\n", dirp->d_name, dirp->d_type, telldir(dp));
    }

    closedir(dp);
    return 0;
}




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值