【问题标题】:C++ program to count number of objects in a particular Linux directory用于计算特定 Linux 目录中对象数量的 C++ 程序
【发布时间】:2010-09-19 20:46:48
【问题描述】:

我正在尝试使用 C++ 在 Linux 中编写一个程序,该程序计算用户指定目录中的文件和文件夹的数量,但我读的越多,我就越困惑。我是 C++ 和一般编程的新手,我知道一开始我有一个很大的障碍要克服,但我不完全确定从哪里开始阅读这个。我已经阅读了一些关于分叉进程和系统调用的内容,但是如果有人要简要概述我必须经历的过程来实现这一点,那么我可以自己对各种功能进行更深入的阅读。

【问题讨论】:

  • 这与fork无关。虽然它一个基本的 Unix-y 系统调用并且有很多材料都在谈论它,但不要认为你必须将它用于所有事情。 ;)
  • “Linux 目录中的对象数量”应该不仅仅包括文件和文件夹。例如,只需检查/dev/ 目录。

标签: c++ linux system


【解决方案1】:

使用 C++ Boost.FileSystem 为您提供方便的工具来实现您想要的。

如果您想学习基本的 C API,请查看 GNU C 库手册中的File System Interface

【讨论】:

    【解决方案2】:

    如果您真的想以 Linux 方式进行操作,请查看 opendirreaddirclosedir 系统调用。有一个示例 here 基本上就是您尝试编写的程序(不过,它打印内容而不是计算内容)。

    如果我是你,我会坚持使用 Georg 建议的更高级别的库。

    【讨论】:

      【解决方案3】:

      在 *nix 上,您可以使用 C 库函数 opendirreaddir

      基本上,调用 opendir() 来获取目录句柄。使用 readdir() 遍历该目录中的条目

      【讨论】:

        【解决方案4】:

        最简单和最跨平台的方法是使用boost::filesystem。在 UNIX(Linux、Mac OS X、Free BSD 等)上,有很多方法可以做到这一点。正如已经指出的那样,opendirreaddirclosedir 是可能的。我应该指出,与其使用 readdir,不如使用可重入的readdir_r(这意味着从多个不同线程同时使用是安全的),而普通的 readdir 调用不是可重入的(因此不能保证由 Single UNIX Specification / IEEE Std. 1003.1 a.k.a. POSIX 成为线程安全的)。尽管这些可能不是最容易使用且不适合此特定任务,但对于遍历文件系统的其他操作,您可能还对 nftwftw 感兴趣,它们特别适合在文件系统。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-04-27
          • 1970-01-01
          • 2021-08-25
          • 1970-01-01
          • 1970-01-01
          • 2011-12-03
          相关资源
          最近更新 更多