文件重命名: 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 未知