首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >$HOME时出现getcwd错误

$HOME时出现getcwd错误
EN

Stack Overflow用户
提问于 2018-06-30 06:16:32
回答 1查看 296关注 0票数 1

我编写了自己的find()函数。当我这样做的时候:

代码语言:javascript
复制
./myown $HOME/Documents test.txt

我得到了:

代码语言:javascript
复制
/Users/CJ/Documents/test/test.txt
/Users/CJ/Documents/test/test1/test.txt
/Users/CJ/Documents/test/test2/test.txt

然而,当我这样做的时候:

代码语言:javascript
复制
./myown $HOME test.txt

我得到了:

代码语言:javascript
复制
getcwd error

我的getcwd代码在这里,它在一个helper函数中:

代码语言:javascript
复制
findit(*directory, *pattern){
    ...
    if(getcwd(cwd, 2048+1) == NULL){ 
        fprintf(stderr, "getcwd error\n");
        exit(1);
    }
    ...
}

我该如何解决这个问题?

编辑:closedir()解决了这个问题,但现在有另一个问题。当我这样做时,结果是相同的:./myown $HOME/Documents test.txt,但当我以另一种方式做时,我得到:stat error

代码语言:javascript
复制
` 
struct stat mode;
if(stat(entry->d_name, &mode) == -1){ 
        fprintf(stderr, "stat error\n");
        continue;
 }`

我没有在代码中的其他地方使用stat error。

这也很有帮助,这就是我使用open的方法。

DIR *dir dir = opendir(".");

错误在readdir()中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-30 06:56:17

一个建议的调试步骤是:

由于getcwd()会在失败时设置errno,因此您可能应该报告errno,也许可以使用perror("getcwd")。虽然我对perror()不感兴趣,但在这里可能是最简单的。

原来,错误集是EMFILE Too open files。

好了,现在你知道问题出在哪里了。getcwd()失败是因为您打开了很多文件,但没有关闭足够的文件,它需要一些可用的文件描述符,但您没有留下任何可供它使用的文件描述符。

在收到请求时,我详细说明了这一点:

您已经打开了文件和/或目录(使用opendir()打开目录通常使用文件描述符),但您尚未关闭它们。因此,系统不允许您打开更多的文件-并且getcwd()失败。它可能不是直接的;您的程序可能在失败之前已经做了一些处理。

OP观察到:

我刚刚发现我还没有用过fclose;请稍等,我会检查一下是否就是这样。

确保您使用过fclose()closedir() -如果您通过直接调用close()使用过任何文件描述符,则还要使用普通的open() -应该会有所帮助。但是,如果对getcwd()的调用是您的代码要做的第一件事,那就不会是因为您打开了很多文件(您还没有打开)。

如果在关闭文件后仍然存在问题,那么您需要后退一步,并检查更大的上下文。

例如:

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51110046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档