gpt4 book ai didi

c - struct stat 和 stat 函数失败

转载 作者:行者123 更新时间:2023-11-30 19:34:21 26 4
gpt4 key购买 nike

所以,我正在尝试创建一种 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 不够大,无法存储这些值,但我不知道如何解决这个问题。感谢您提前的帮助!

最佳答案

考虑看看man pages 。简而言之 stat() 返回:

On success, zero is returned. On error, -1 is returned, and errno is set appropriately.

错误号列表是:

  • EACCES
  • EBADF
  • 错误
  • ELOOP
  • ENAMETOOLONG
  • 埃诺特
  • 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];

附注感谢Jonathan Leffler指出我的 switch 拼写错误:)

关于c - struct stat 和 stat 函数失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44038053/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com