код печати каталогов в UNIX делает ошибку - PullRequest
0 голосов
/ 12 ноября 2018

Я изучал UNIX, и в книге есть пример кода

, но этот код, похоже, не работает.Когда я компилирую код, возвращается ошибка сегментации.

#include<dirent.h>
#include<stdlib.h>
#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>

int my_double_ls(const char *name)
{
   struct dirent *d;
   DIR *dp;

   if ((dp=opendir(name)) == NULL)
    return (-1);

   while (d=readdir(dp)) {
    if (d->d_ino != 0)
        printf("%s\n", d->d_name);
   }

   rewinddir(dp);

  while (d = readdir(dp)) {
    if (d->d_ino != 0)
        printf("%s\n", d->d_name);
  }

  closedir(dp);
  return(0);
}

int main(int argc, char **argv){

  my_double_ls(argv[1]);

  return(0);
}

1 Ответ

0 голосов
/ 12 ноября 2018

Вы, вероятно, вызывали программу без аргументов командной строки:

Попробуйте:

...
int main(int argc, char **argv){
  if (argc < 2)
  {
     printf("You need to specify the directory.\n");
     exit(1);
  }

  my_double_ls(argv[1]);
  return 0;
}

Функция my_double_ls выглядит для меня более или менее корректно.

...