Linux目录

该博客介绍了如何在Linux中使用C语言进行目录操作,包括打开目录、读取目录内容以及获取文件信息。通过`opendir()`、`readdir()`和`stat()`等函数,可以列出目录中的文件和子目录,并展示它们的类型、权限、所有者信息及修改时间等详细属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

早期,目录就是一个包含有文件名和磁盘分配表的正常文件,可以像其他文件一样打开和读取目录文件,由于效率的需求以及各种不同文件系统的存在,开发人员创建了一些特殊的函数用来打开,读取,关闭目录.

不仅可以获取文件名和目录名列表,也可以获取文件和目录的相当一部分信息.下面的示例列出了目录中的所有文件名和子目录名,并且对每一项显示了一些信息.

结构体stat中可以获取的信息的详细内容,可以通过在终端键入:man 2 stat来查看.

/* showdir.c */

#include <sys/types.h>

#include <sys/stat.h>

#include <errno.h>

#include <unistd.h>

#include <dirent.h>

#include <stdio.h>

 

int main(int argc, char *argv[])

{

    DIR *dir;

    struct dirent *dent;

    struct stat st;

    char *directory_name = ".";

    char file_name[120];

 

    if (argc > 1)

        directory_name = argv[1];

//调用函数opendir()打开目录,返回一个DIR型的数据作为句柄以操作目录

    if ((dir = opendir(directory_name)) == NULL) {

        perror("Cannot open directory");

        return 1;

    }

//调用函数readdir()读取目录的每一项(头两项总是”.”和”..”)

    while (dent = readdir(dir)) {

        printf("the object: %s\n", dent->d_name);

        sprintf(file_name, "%s/%s", directory_name, dent->d_name);

//调用函数stat()来获取文件信息,返回信息在结构体st中

        if (stat(file_name, &st) < 0) {

            perror("Cannot get file status");

            errno = 0;

            continue;

        }

        printf("  A ");

        if (S_ISLNK(st.st_mode))

            printf("symbolic link");

        if (S_ISREG(st.st_mode))

            printf("regular file");

        if (S_ISDIR(st.st_mode))

            printf("directory");

        if (S_ISCHR(st.st_mode))

            printf("character device");

        if (S_ISBLK(st.st_mode))

            printf("block device");

        if (S_ISFIFO(st.st_mode))

            printf("fifo");

        if (S_ISSOCK(st.st_mode))

            printf("socket");

        printf("\n");

        printf("  Owner group: %d   user: %d\n",

            st.st_gid, st.st_uid);

        printf("  File size in bytes: %d\n", st.st_size);

        printf("  Accessed: %d", ctime(&st.st_atime));

        printf("  Modified: %d\n\n", ctime(&st.st_mtime));

        errno = 0;

    }

    if (errno != 0)

        perror("Cannot read directory entry");

//调用函数closedir()来关闭目录

    closedir(dir);

    return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值