Используйте функцию nftw()
(File Tree Walk) с флагом FTW_DEPTH
. Укажите обратный вызов, который просто вызывает remove()
переданного файла:
#define _XOPEN_SOURCE 500
#include <stdio.h>
#include <ftw.h>
#include <unistd.h>
int unlink_cb(const char *fpath, const struct stat *sb, int typeflag, struct FTW *ftwbuf)
{
int rv = remove(fpath);
if (rv)
perror(fpath);
return rv;
}
int rmrf(char *path)
{
return nftw(path, unlink_cb, 64, FTW_DEPTH | FTW_PHYS);
}
Если вы не хотите удалять сам базовый каталог, измените функцию unlink_cb()
, чтобы проверить уровень:
int unlink_cb(const char *fpath, const struct stat *sb, int typeflag, struct FTW *ftwbuf)
{
int rv;
if (ftwbuf->level == 0)
return 0;
rv = remove(fpath);
if (rv)
perror(fpath);
return rv;
}