Есть функция chmod. От man 3p chmod :
SYNOPSIS
#include <sys/stat.h>
int chmod(const char *path, mode_t mode);
...
Если вы хотите прочитать разрешения, вы должны использовать stat. От человек 3p стат :
SYNOPSIS
#include <sys/stat.h>
int stat(const char *restrict path, struct stat *restrict buf);
...
Если вы хотите сделать это рекурсивно, как вы упомянули, вам придется выполнить цикл по результатам readdir
самостоятельно.