Дополнить код(добавить рекурсию) на Си под Linux

450 руб. за проект
01 декабря 2022, 22:01 • 2 отклика • 32 просмотра
Помогите пожалуйста изменить код, с учетом того, что файлы ищутся(и изменяются) не только в текущем каталоге, но и во всех его подкаталогах (любой степени вложенности).Фиктивные каталоги нужно игнорировать.
(Код если что меняет имена целочисленных файлов в те же имена, только переводит их в 16ричную систему счисления). Сам код:
#include <stdio.h>
#include <unistd.h>
#include <limits.h>
#include <dirent.h>
#include <ctype.h>
#include <stdlib.h>
#define BUFFER_SIZE 256

static int is_number(const char *name)
{
for (; *++name;) {
if (!isdigit(*name)) {
return 0;
}
}
return 1;
}

int main(void)
{
DIR *cwd;
struct dirent *entry;
char cwd_path[PATH_MAX];
char buffer[BUFFER_SIZE];

if (!getcwd(cwd_path, PATH_MAX)) {
perror("getcwd error");
return -1;
}

if (cwd = opendir(cwd_path)) {
while ((entry = readdir(cwd))) {
if (entry->d_type != DT_DIR) {
if (is_number(entry->d_name)) {
sprintf(buffer, "%x", atoi(entry->d_name));
rename(entry->d_name, buffer);
}
}
}

closedir(cwd);
}
else {
perror("opendir error");
return -1;
}
return 0;
}