Как этот код перечисляет все элементы из папки? - PullRequest
1 голос
/ 25 сентября 2019

На человеческом уровне, когда человек открывает контейнер, пока есть свет и вещи не прячутся друг за другом, человек может видеть все сразу.

В коде ниже ..Когда каталог открыт, нет ли света (информация)?разве он не видит все сразу?

Он читает 1 элемент, и, поскольку он прочитал его, этот элемент автоматически исчезает?что заставляет его исчезнуть?«+1» не добавляется к «count» ..

, и затем он читает следующий элемент, как если бы он снова был первым.

почти как если бы все было наложено друг на друга, и он не может видеть ничего, кроме того, что находится сверху, и как только он читает верхний элемент, верхний элемент исчезает, а следующийтолкнул наверх для чтения?

что толкает его вверх?

  DIR *d;
  struct dirent *dir;

  d = opendir("test/");

    while ((dir = readdir(d)) != NULL) {
      fputs(dir->d_name, stdout);
      fputs("\n", stdout);
    }

    closedir(d);

Ответы [ 2 ]

0 голосов
/ 25 сентября 2019

Вам необходимо прочитать документацию для функции, чтобы понять, что она делает.В Unix предполагается, что man-страницы установлены:

man readdir

В нем будет указано что-то похожее на:

The readdir() function returns a pointer to a dirent structure
representing the next directory entry in the directory stream pointed
to by dirp.  It returns NULL on reaching the end of the directory
stream or if an error occurred.

То есть внутренне, каждый раз, когда он вызывает эту функцию, он заполняет ееследующая информация из списка dir, поэтому обрабатывает приращение любых подсчетов или указателей для вас.

С точки зрения «видеть все» одновременно.Вы просматриваете каждую запись, поэтому обрабатываете по одному элементу за раз.

0 голосов
/ 25 сентября 2019

Из записи справочной страницы readdir() linux :

Функция readdir () возвращает указатель на структуру dirent, представляющую следующую запись каталога в указанном потоке каталогак Dirp.Он возвращает NULL по достижении конца потока каталога или если произошла ошибка.

Таким образом, «+1» находится внутри readdir().На этом уровне ничего не толкается вниз или вверх, а список каталогов сканируется и элементы проверяются по одному за раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...