0801|IO进程线程day4 文件IO函数-目录相关函数

1)opendir

 功能:打开一个目录文件;

原型:

    #include <sys/types.h>
    #include <dirent.h>

    DIR *opendir(const char *name);

参数:

        char *name:指定要打开的目录的路径以及名字;

返回值:

        成功,返回指针;

        失败,返回NULL,更新errno;

2)closedir

 功能:关闭目录;

原型:

    #include <sys/types.h>
    #include <dirent.h>

    int closedir(DIR *dirp);

参数:

        DIR *dirp:指向要关闭的文件的指针名;

返回值:

        成功,返回0;

        失败,返回-1,更新errno;

3)readdir

 功能:读取目录;

原型:

    #include <dirent.h>

    struct dirent *readdir(DIR *dirp);

参数:

        DIR *dirp:指向要读取的文件指针名

返回值:

        成功,返回结构体指针;

        失败,返回NULL; 更新errno;

        目录读取完毕,返回NULL,不更新errno;

结构体成员:

struct dirent {

    ino_t          d_ino;       /* Inode number */
    off_t          d_off;       /* Not an offset; see below */
    unsigned short d_reclen;    /* Length of this record */
    unsigned char  d_type;      /* Type of file; not supported
                                              by all filesystem types */
    char           d_name[256]; /* Null-terminated filename */

};

4)综合练习:打印当前路径下所有文件的名字,除了隐藏文件

#include <stdio.h>
#include <head.h>
#include <sys/types.h>
#include <dirent.h>
#include <errno.h>

int main(int argc, const char *argv[])
{
    DIR* dp = opendir("./");
    if(NULL == dp)
    {
        ERR_MSG("opendir");
        return -1;
    }
    printf("opendir success\n");

    int i = 0;
    while(1)
    {
        struct dirent* rp = readdir(dp);
        if(NULL == rp)                                 
        {
            if(0 == errno)
            {
                printf("目录读取完毕\n");
                break;
            }
            else
            {
                ERR_MSG("readdir");
                return -1;
            }
        }

        //判断是否是隐藏文件:以.字符开头
        if(rp->d_name[0] != '.')    //*(rp->d_name)
            printf("[%d]%s\n", ++i, rp->d_name);
    }




    if(closedir(dp) < 0)
    {
        ERR_MSG("closedir");
        return -1;
    }

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值