Мне нужно вывести только те каталоги в текущей папке, в которых, как я уже упоминал, есть другие папки.
#define _DEFAULT_SOURCE ;
#include <sys/stat.h>
#include <sys/types.h>
#include <dirent.h>
#include <unistd.h>
#include <limits.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char cwd[PATH_MAX];
if (getcwd(cwd, sizeof(cwd)) != NULL)
{
struct dirent *pDirent;
DIR *pDir;
pDir = opendir(cwd);
if(pDir != NULL)
{
struct stat sb;
struct dirent **folderArray;
folderArray = malloc(sizeof(struct stat));
int foIndex = 0;
while ((pDirent = readdir(pDir)) != NULL)
{
if(strcmp(pDirent->d_name, ".") != 0
&& strcmp(pDirent->d_name, "..") != 0)
{
stat(pDirent->d_name,&sb);
if((sb.st_mode & S_IFMT) == S_IFDIR)
{
folderArray[foIndex++] = pDirent;
folderArray = realloc(folderArray, sizeof(struct stat)*(foIndex+1));
}
}
}
struct dirent *tDirent;
DIR *tDir;
for(int i = 0; i<foIndex; ++i)
{
tDir = opendir(folderArray[i]->d_name);
while ((tDirent = readdir(tDir)) != NULL)
{
stat(tDirent->d_name,&sb);
if((sb.st_mode & S_IFMT) == S_IFDIR)
{
printf("%s\n", folderArray[i]->d_name);
break;
}
closedir(tDir);
}
}
closedir(pDir);
free(pDirent);
free(folderArray);
}
}
return 0;
}
Я придумал это решение, и теперь мне интересно, нужно ли было создавать новый массив или это можно сделать только в одном l oop? Потому что я не могу понять, храню ли я в этом массиве только тупиковые указатели или могу использовать его для открытия своих папок.