【问题标题】:using linux system calls and file & folder management in c++在 C++ 中使用 linux 系统调用和文件和文件夹管理
【发布时间】:2012-05-26 02:06:02
【问题描述】:

我正在编写一个 c++ 程序,任务如下:

我有一个string proj_Name 和另一个字符串地址,我的程序旁边有一个名为root 的文件夹。现在我必须在根文件夹中创建一个名为proj_name 的文件夹,并将地址中的所有内容复制到这个新文件夹中。

当使用 linux 终端创建目录或处理文件时,我输入 mkdir proj_namecp [src] [dst]。有人告诉我,要在我的程序中使用终端命令,我必须使用系统调用,但我不知道什么是系统调用或如何使用它。

除此之外,我可能会在根目录下创建更多项目文件夹,并且我必须能够访问我的程序中的每个文件夹。

如何使用 OOP 设计来处理这些文件和文件夹(例如,我从用户那里得到一个 proj_name,我必须在根目录中找到相应的文件夹,然后对该项目执行一些任务)?

当然我应该有一个_project_ class,但我不知道它需要什么成员变量。此外,有人告诉我,我可以像这样以递归方式复制文件夹:复制文件夹->打开它->为每个文件->复制文件->为每个文件夹从头开始执行此算法。

有人可以帮帮我吗?

提前致谢。

【问题讨论】:

  • man mkdir 显示 shell 命令的文档。 man 2 mkdir 提供系统调用的文档。
  • 另外,请注意系统调用是mkdir,而不是mkfolder。别再叫它“文件夹”了!

标签: c++ linux system-calls file-management


【解决方案1】:

我假设这是家庭作业,尽管您没有表明它是。三种解决方案浮现在脑海中:

  1. 使用system() 调用创建命令行字符串并执行它们。坦率地说,这很糟糕,原因有很多:(i) 很难检查命令是否有效,(ii) 很容易插入恶意代码(即 hack),以及 (iii) 它非常特定于平台。

  2. 正如您所提到的,您可以使用系统调用来复制文件、创建目录等。如果您在 UNIX 上工作,您可以take a look at this question 这可能会有所帮助。同样,这里的缺点是它非常特定于平台。

  3. 1234563不过,浏览 API 可能会为您提供一些线索,了解各种对象如何在 OO 设计中组合在一起。

【讨论】:

  • 我同意使用system(3) 库函数不是一个好主意,但我不确定它是否特定于平台。小心谨慎(例如$PATH /bin:/usr/bin 开头,并使用完整路径,例如/bin/mkdir 而不仅仅是mkdir),您可以以相当可移植的方式使用Posix 指定的命令。
猜你喜欢
  • 2018-07-15
  • 2016-06-23
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-21
相关资源
最近更新 更多