在Debian系统中,使用readdir函数可以帮助你遍历目录中的文件和子目录。结合其他文件操作函数,你可以实现一个简单的文件压缩工具。以下是一个基本的示例,展示如何使用readdir来遍历目录,并使用tar命令来压缩文件。
readdir函数遍历目录。#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <sys/stat.h>
#include <string.h>
void compress_directory(const char *dir_path, const char *output_filename) {
FILE *tar_file = fopen(output_filename, "wb");
if (!tar_file) {
perror("Failed to open output tar file");
return;
}
char command[1024];
snprintf(command, sizeof(command), "tar -cvf - %s", dir_path);
FILE *pipe = popen(command, "r");
if (!pipe) {
perror("Failed to run tar command");
fclose(tar_file);
return;
}
char buffer[128];
while (fgets(buffer, sizeof(buffer), pipe) != NULL) {
fputs(buffer, tar_file);
}
pclose(pipe);
fclose(tar_file);
}
int main(int argc, char *argv[]) {
if (argc != 3) {
fprintf(stderr, "Usage: %s <directory> <output.tar>\n", argv[0]);
return 1;
}
const char *dir_path = argv[1];
const char *output_filename = argv[2];
compress_directory(dir_path, output_filename);
return 0;
}
compress_directory函数:
tar命令,将指定目录打包成一个tar归档。popen执行tar命令,并将输出重定向到tar文件。main函数:
compress_directory函数进行压缩。gcc -o compress_directory compress_directory.c
./compress_directory /path/to/directory output.tar
popen来执行外部命令,这在某些情况下可能不安全,特别是当目录路径来自不可信的输入时。libarchive)来处理文件压缩,但这需要更多的代码和依赖。通过这种方式,你可以使用readdir函数遍历目录,并结合其他工具来实现文件压缩。