我正在使用statfs检索硬盘上可用的总空间。它在大多数时候返回正确的值,但有时它只返回一个没有明显原因的错误。我想知道为什么它会在看似随机的时间产生错误。
我有没有办法检查它为什么会产生错误?如果我打印strerror(errno)我只会得到消息“没有这样的文件或目录”。这告诉我问题是什么,但不是什么导致的。我看不出它为什么能在某个时刻成功地找到目录,但在下一刻却找不到它。我能查一下是什么原因吗?我怀疑这是否是我的代码的问题,因为如果是这样,如果永远不会返回正确的数据。
我把“/”作为目录传入。我在使用objective-c/c的xcode 3.2.6的os x雪豹上
我怎么能找到导致它找不到
路径?
什么是一些一般原因,使它能够找到驱动器在一个时刻,而不是下一个?
用于检索信息的代码:

    if (statfs(&path, &storageStats))
    {
        NSLog(@"Total storage stats retrieval failed with errno: %s.\n", strerror(errno));
        exit(EXIT_FAILURE);
    }
    else
    {
        totalAmount = storageStats.f_blocks * storageStats.f_bsize;
        NSLog(@"Storage: %f\n", totalAmount);
        return self;
    }

我得到“Total storage stats retrieveal failed…”,错误信息是“no such file or directory”

最佳答案

statfs的第一个参数是char*。因为您传递的是&path,这意味着path是一个char。如果是这种情况,则仅有时传递以空结尾的字符串。(如果路径是“/”,下一个字节恰好是“\0”,则调用将起作用。如果路径后面的内存不是'\0',则您正在将一个非常奇怪的路径传递给statfs。)您可能打算执行以下操作:
字符*路径=“/”;
statfs(路径,…)

10-07 21:45