0
int main()  {
    char buf[100];
    FILE *fp = popen("df -P /myLoc", "r");
    while (fgets(buf, 100, fp) != NULL) {
        printf( "%s", buf);
    }
    pclose(fp);

    return 0;
}

输出:

Filesystem             512-blocks  Used  Available Capacity Mounted on
/dev0/vol0             123456      3456   5464675     4%    /sys

我在 buf 变量中得到了命令的输出。但我需要将容量的值(在本例中为 4)转换为一个整数变量。我认为可以使用 cut 或 awk 命令,但不确定如何使其准确工作。

任何帮助表示赞赏。

4

2 回答 2

6

如果你想使用 shell 工具,你应该编写一个 shell 脚本。

如果这真的必须在 C 中,您应该使用 POSIX 提供的系统调用,而不是通过popen. 在你的情况下,这将是结构statvfs的成员。f_favailstatvfs

#include <stdio.h>
#include <sys/types.h>
#include <sys/statvfs.h>

int main()
{
  struct statvfs buf;
  statvfs("/my/path", &buf);
  printf("Free: %lu", buf.f_favail);

  return 0;
}
于 2013-05-28T07:27:42.240 回答
2

将您的df命令替换为df -P /myLoc | awk '{print $5}' | tail -n 1 | cut -d'%' -f 1.

在您的情况下,这将返回 4。然后您可以使用atoi()将其转换为 int。

但正如其他人所建议的那样,使用系统调用至少应该更便携。

于 2013-05-28T07:28:55.330 回答