【问题标题】:Debugging statfs?调试statfs?
【发布时间】:2012-03-05 12:06:41
【问题描述】:

我正在使用 statfs 检索硬盘上的可用总空间。它大多数时候返回正确的值,但有时它只是无缘无故地返回错误。我想知道为什么它会在看似随机的时间产生错误。

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

我传入'/'作为目录。我在 OS X Snowleopard 上使用 Xcode 3.2.6 使用 Objective-C/C

  • 我怎样才能找到导致它找不到的问题 小路?
  • 有哪些一般原因会导致它能够在某一时刻而不是下一个时刻找到驱动器?

用于检索信息的代码:

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

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

【问题讨论】:

  • 您如何确定statfs“返回错误”?给我们看一个代码 sn-p。
  • @R.. 我将代码添加到我的问题中。

标签: objective-c c macos unix hardware


【解决方案1】:

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

字符 *path = "/"; statfs(路径,...)

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2010-12-11
      • 1970-01-01
      • 1970-01-01
      • 2012-02-29
      • 1970-01-01
      • 2017-10-04
      • 1970-01-01
      • 2010-09-28
      • 2013-01-25
      相关资源
      最近更新 更多