【问题标题】:How to use command in function system() [closed]如何在函数 system() 中使用命令 [关闭]
【发布时间】:2017-12-23 17:16:29
【问题描述】:

我想使用 system("cd \") 函数进入根目录,但它不起作用,因为我想创建一个文件夹 system("md examplecpp");在这个路径中,会在我有一个程序的地方创建一个文件夹。

【问题讨论】:

  • 系统函数启动一个终端会话,在命令执行后退出。为什么不随 mkdir/md 命令一起指定路径
  • 调用系统一次。如果要指定多个命令,请用&& 分隔它们。话虽如此,您想要执行的命令最好直接在c++ 代码中完成。你也没有在你的第一个 system() 中正确地转义 \
  • 正确的解决方案是根本不使用system()。使用专门创建文件夹的系统函数,如CreateDirectory() 或其他等效函数。任何时候你必须求助于system(),通常都有更好的方法

标签: c++ windows console


【解决方案1】:

您的问题是“当前目录”是每个进程的属性(尽管子进程继承其父进程的当前目录作为初始设置)。 system 函数创建一个shell 进程,该进程执行cd 命令(从而改变shell 进程的当前目录),然后退出。父进程(你的程序)的当前目录永远不会改变。

查看_chdir 函数(或Posix chdir

编辑:你肯定是在 Windows 上——你甚至把它放在标签里!

【讨论】:

    【解决方案2】:

    我想用system("cd \")函数去root 目录,但它不起作用,因为我想创建一个文件夹 system("md examplecpp");

    在调用系统之前,将两个(或多个)命令合并为一个命令,用分号分隔。

     std::string cmd = "cd /home/dmoen ; mkdir examplecpp ; ls -lsa ";
     std::cout << "\nsystem command: " << cmd << "\n" << std::endl;
     std::system (cmd.c_str());
    

    课程 - cmd 字符串应该看起来就像您在命令提示符下键入的一样。在测试期间,您可能会决定包含一个“rmdir examplecpp”,因为如果 dir 已经存在,“mkdir”会抱怨。

    输出(无趣的东西被剪掉了):

    system command: cd /home/dmoen ; mkdir examplecpp ; ls -lsa 
    
    total 402216
         4 drwxr-xr-x 105 dmoen dmoen      4096 Dec 23 11:42 .
         4 drwxr-xr-x   5 root  root       4096 Jan  3  2016 ..
        [snip]
         4 drwxrwxr-x   2 dmoen dmoen      4096 Dec 23 11:42 examplecpp
        [snip]
    

    【讨论】:

    • 注意 - 我的系统是 Ubuntu 15.10。我忘了什么 shell - 可能是 bash。
    • 鉴于 OP 想要 cd \ 作为 root 用户,他们可能在 Windows 上。鉴于他们标记了问题 Windows,他们肯定在 Windows 上(使用一致的代词重新发布)
    • 我已经确认分号分隔符(命令之间)在“命令提示符”上有效,drescherjm 识别的“&&”分隔符也是如此。
    • 另请参阅stackoverflow.com/a/152142/2785528 - 那里的大多数答案表明 Windows 没有用于 root 的 Unix 概念“\”。
    • Windows 文件形成森林,而不是树。每个驱动器都有自己的根。鉴于大多数人只有一个驱动器,许多 Windows 程序员(尤其是初学者,如 OP)将其视为“根”。
    猜你喜欢
    • 2015-11-10
    • 1970-01-01
    • 2021-01-03
    • 2013-07-13
    • 2014-04-10
    • 2023-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多