c - 在 UNIX 上打印目录代码出错

标签 c unix posix command-line-arguments ls

我一直在研究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);
}

最佳答案

您可能在没有命令行参数的情况下调用了该程序:

试试这个:

...
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 函数在我看来或多或少是正确的。

关于c - 在 UNIX 上打印目录代码出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53263940/

相关文章:

regex - 使用 sed 删除子字符串

c++ - 符号引用错误

python - 使用python扩展字符串中的环境变量

c - 自增int和静态int的意义: C

c - MMAP 中的 ENODEV 错误

c - 如何在 C 中尽早结束循环?

c - Solaris 中的 getopt 隐式声明?

c - GTK+,结构中的 gchar 似乎被释放

windows - Macintosh 是否有像 Windows 一样基于消息的范例?

bash - 在 Vagrant 脚本中重新加载虚拟机