结构统计和统计功能失败

时间:2017-05-18 03:21:43

标签: c struct stat scandir

所以,我正在尝试制作一种ls函数。这是我对每个文件描述的代码

struct stat fileStat;
struct dirent **files;

num_entries = scandir(filename, &files, file_select, alphasort);
stat(files[i-1]->d_name,fileStat);

由于某些原因,一旦获得s​​tat,它返回-1。我当时认为这是因为fileStat不足以存储值,但我不知道如何解决这个问题。感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

考虑一下自己看man pages。简而言之,stat()返回:

  

成功时,返回零。出错时,返回-1,错误是   适当地设定。

错误列表是:

  • EACCES
  • EBADF
  • EFAULT
  • ELOOP
  • ENAMETOOLONG
  • ENOENT
  • ENOMEM
  • ENOTDIR
  • EOVERFLOW

调用stat后,检查它的返回值是否为-1,检查errno(带开关)。

示例:

if(stat(files[i-1]->d_name,fileStat)) {
   switch(errno) {
   case EACCES:
       // Add code or at least 
       perror("STAT ERROR:");
       break;

   case EBADF:
       // ...
       break;

   case EFAULT:
       // ...
       break;

       // ...
       // Do this to all possible errno's for the stat
       // ...
   case EOVERFLOW:
       // ...
       break;
   }
}

如果你有存储路径的麻烦,尝试声明数组(如果你使用linux):

#include <linux/limits.h>
//...
char current_path[PATH_MAX];

如果您使用的是Windows:

#include <windows.h>
//...
char current_path[MAX_PATH];

P.S。感谢Jonathan Leffler指出我的切换错字:)