3 Linux 目录操作


前言 (含目录)


文件重命名: rename 函数
修改当前进程路径: chdir 函数
获取当前进程路径: getcwd 函数
创建目录: mkdir 函数
删除文件: remove 函数


/**
 * @author IYATT-yx
 * @brief 读目录
 */
#define _GNU_SOURCE
#include <stdio.h>
#include <dirent.h>
#include <sys/types.h>
#include <string.h>

int main(int argc, char **argv)
{
    if (argc != 2)
    {
        printf("请指定要打开的目录!\n");
        return -1;
    }

    DIR *dirPtr = opendir(argv[1]);
    if (dirPtr == NULL)
    {
        perror("opendir");
        return -1;
    }

    size_t blk_t = 0, chr_t = 0, dir_t = 0, lnk_t = 0, fifo_t = 0, reg_t = 0, sock_t = 0, total = 0;
    struct dirent *dir;
    printf("目录中含有的文件:\n");
    while ((dir = readdir(dirPtr)) != NULL)
    {
        // 过滤掉 . 和 ..
        if (strcmp(".", dir->d_name) == 0 || strcmp("..", dir->d_name) == 0)
        {
            continue;
        }

        printf("%s\t", dir->d_name);

        ++total;
        // 各种文件类型计数
        switch (dir->d_type)
        {
            case DT_BLK:
                ++blk_t;
                break;
            case DT_CHR:
                ++chr_t;
                break;
            case DT_DIR:
                ++dir_t;
                break;
            case DT_LNK:
                ++lnk_t;
                break;
            case DT_FIFO:
                ++fifo_t;
                break;
            case DT_REG:
                ++reg_t;
                break;
            case DT_SOCK:
                ++sock_t;
                break;
            default:
                break;
        }
    }
    printf("\n\n");

    printf("总文件个数: %zd\n", total);
    printf("块设备个数: %zd\n", blk_t);
    printf("字符设备个数: %zd\n", chr_t);
    printf("目录个数: %zd\n", dir_t);
    printf("软链接个数: %zd\n", lnk_t);
    printf("管道个数: %zd\n", fifo_t);
    printf("普通文件个数: %zd\n", reg_t);
    printf("套接字个数: %zd\n", sock_t);

    closedir(dirPtr);
}

执行程序,参数指定路径. 程序会显示出该目录下文件的名字,并统计总文件个数以及各种类型文件分别的个数. 用到的相关结构体和宏见下:

dirent结构体

struct dirent
{
	// 此目录进入点的inode
	ino_t d_ino;
	// 目录文件开头到此目录进入点的位移
	ff_t d_off;
	// d_name 的长度,不包括NULL字符
	signed short int d_reclen;
	// d_name所指的文件类型
	unsigned char d_type;
	// 文件名
	har d_name[256];
}

d_type

  • DT_BLK 块设备
  • DT_CHR 字符设备
  • DT_DIR 目录
  • DT_LNK 软链接
  • DT_FIFO 管道
  • DT_REG 普通文件
  • DT_SOCK 套接字
  • DT_UNKNOWN 未知
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值