所以,我正在尝试制作一种ls函数。这是我对每个文件描述的代码
struct stat fileStat;
struct dirent **files;
num_entries = scandir(filename, &files, file_select, alphasort);
stat(files[i-1]->d_name,fileStat);
由于某些原因,一旦获得stat,它返回-1。我当时认为这是因为fileStat不足以存储值,但我不知道如何解决这个问题。感谢您的帮助!
答案 0 :(得分:0)
考虑一下自己看man pages。简而言之,stat()返回:
成功时,返回零。出错时,返回-1,错误是 适当地设定。
错误列表是:
调用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指出我的切换错字:)