在C语言中,如何根据目录名求磁盘剩余空间

发布于 2022-10-03 17:25:23 字数 99 浏览 23 评论 0

请教各位大侠:
知道目录名,如何判断(得到)这个目录所在磁盘的剩余空间(用c语言实现)?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

素手挽清风 2022-10-10 17:25:23

帮你顶

倾听心声的旋律 2022-10-10 17:25:23

通过调用系统命令“df”,然后引用起返回值

错々过的事 2022-10-10 17:25:23

df 命令是怎样工作的?我需要作一个独立的命令,不倚赖其它命令.

有没有df的代码实现或他的实现原理?

君勿笑 2022-10-10 17:25:23

http://www.koders.com/c/fid9C541A435B215354EA5310CDAE1382D4655E961D.aspx

微凉 2022-10-10 17:25:23

本帖最后由 yjh777 于 2011-05-09 23:18 编辑

程序中有一个 #include "internal.h"

有没有它的代码,那些结构和函数都不知道是怎么定义的,,
http://www.koders.com/c/fid9C541A435B215354EA5310CDAE1382D4655E961D.aspx
--------------------------------------------------------------------------------------------------------
系统调用:  statfs(2)

  1. /* vi: set sw=4 ts=4: */
  2. /*
  3. * Mini df implementation for busybox
  4. *
  5. * Copyright (C) 1999,2000 by Lineo, inc.
  6. * Written by Erik Andersen <andersen@lineo.com>, <andersee@debian.org>
  7. * based on original code by (I think) Bruce Perens <bruce@pixar.com>.
  8. *
  9. * This program is free software; you can redistribute it and/or modify
  10. * it under the terms of the GNU General Public License as published by
  11. * the Free Software Foundation; either version 2 of the License, or
  12. * (at your option) any later version.
  13. *
  14. * This program is distributed in the hope that it will be useful,
  15. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  17. * General Public License for more details.
  18. *
  19. * You should have received a copy of the GNU General Public License
  20. * along with this program; if not, write to the Free Software
  21. * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  22. *
  23. */
  24. #include "internal.h"
  25. #include <stdio.h>
  26. #include <mntent.h>
  27. #include <sys/stat.h>
  28. #include <sys/vfs.h>
  29. static const char df_usage[] = "df [filesystem ...]\n"
  30. #ifndef BB_FEATURE_TRIVIAL_HELP
  31.     "\nPrint the filesystem space used and space available.\n"
  32. #endif
  33.     ;
  34. extern const char mtab_file[];    /* Defined in utility.c */
  35. static int df(char *device, const char *mountPoint)
  36. {
  37.     struct statfs s;
  38.     long blocks_used;
  39.     long blocks_percent_used;
  40.     if (statfs(mountPoint, &s) != 0) {
  41.         perror(mountPoint);
  42.         return FALSE;
  43.     }
  44.     if (s.f_blocks > 0) {
  45.         blocks_used = s.f_blocks - s.f_bfree;
  46.         blocks_percent_used = (long)
  47.             (blocks_used * 100.0 / (blocks_used + s.f_bavail) + 0.5);
  48.         if (strcmp(device, "/dev/root") == 0) {
  49.             /* Adjusts device to be the real root device,
  50.              * or leaves device alone if it can't find it */
  51.             find_real_root_device_name( device);
  52.         }
  53.         printf("%-20s %9ld %9ld %9ld %3ld%% %s\n",
  54.                device,
  55.                (long) (s.f_blocks * (s.f_bsize / 1024.0)),
  56.                (long) ((s.f_blocks - s.f_bfree) * (s.f_bsize / 1024.0)),
  57.                (long) (s.f_bavail * (s.f_bsize / 1024.0)),
  58.                blocks_percent_used, mountPoint);
  59.     }
  60.     return TRUE;
  61. }
  62. extern int df_main(int argc, char **argv)
  63. {
  64.     printf("%-20s %-14s %s %s %s %s\n", "Filesystem",
  65.            "1k-blocks", "Used", "Available", "Use%", "Mounted on");
  66.     if (argc > 1) {
  67.         struct mntent *mountEntry;
  68.         int status;
  69.         if (**(argv + 1) == '-') {
  70.             usage(df_usage);
  71.         }
  72.         while (argc > 1) {
  73.             if ((mountEntry = findMountPoint(argv[1], mtab_file)) == 0) {
  74.                 fprintf(stderr, "%s: can't find mount point.\n", argv[1]);
  75.                 exit(FALSE);
  76.             }
  77.             status = df(mountEntry->mnt_fsname, mountEntry->mnt_dir);
  78.             if (status != 0)
  79.                 exit(status);
  80.             argc--;
  81.             argv++;
  82.         }
  83.         exit(TRUE);
  84.     } else {
  85.         FILE *mountTable;
  86.         struct mntent *mountEntry;
  87.         mountTable = setmntent(mtab_file, "r");
  88.         if (mountTable == 0) {
  89.             perror(mtab_file);
  90.             exit(FALSE);
  91.         }
  92.         while ((mountEntry = getmntent(mountTable))) {
  93.             df(mountEntry->mnt_fsname, mountEntry->mnt_dir);
  94.         }
  95.         endmntent(mountTable);
  96.     }
  97.     return(TRUE);
  98. }
  99. /*
  100. Local Variables:
  101. c-file-style: "linux"
  102. c-basic-offset: 4
  103. tab-width: 4
  104. End:
  105. */

复制代码

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文