调试statfs?

时间:2012-02-14 04:04:32

标签: objective-c c macos unix hardware

我正在使用statfs来检索硬盘上可用的总空间。它在大多数时间返回正确的值,但有时它只是返回错误,没有明显的原因。我想找出为什么它在看似随机的时间产生错误。

有没有办法可以检查它为什么会产生错误?如果我打印strerror(errno)我只是收到消息“没有这样的文件或目录”。这告诉我问题是什么,但不是什么导致它。我没有看到任何理由为什么它能够在某个时刻成功找到该目录但是下一刻无法找到它。有什么方法可以检查是什么导致了这个?我怀疑这是否是我的代码的问题,因为如果是这样的话,如果不会返回正确的数据。

我传入'/'作为目录。我使用Objective-C / C

使用Xcode 3.2.6在OS X Snowleopard上
  • 我怎么能找到导致它找不到的问题 路径?
  • 导致它能够在某个时刻而不是下一个时刻找到驱动器的一般原因是什么?

用于检索信息的代码:

    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;
    }

我收到“总存储统计信息检索失败...”而错误消息是“没有这样的文件或目录”

2 个答案:

答案 0 :(得分:2)

statfs的第一个参数是char *。由于你正在传递& path,这意味着路径是一个char。如果是这种情况,那么有时您只传递一个空终止字符串。 (如果path是'/',下一个字节恰好是'\ 0',那么调用将会有效。如果path之后的内存不是'\ 0',那么你将一个非常奇怪的路径传递给statfs。)你可能意味着:

char *path = "/";
statfs( path, ... )

答案 1 :(得分:0)

关于正确调整路径字符串变量的大小: 致电pathconf()以获取PATH_MAX的值。然后使用该PATH_MAX值声明路径的字符串变量。

PATH_MAX +1可确保您找不到比字符串更长的路径。