【问题标题】:Disable system("mkdir /a/b") call output禁用系统(“mkdir /a/b”)调用输出
【发布时间】:2012-11-01 11:15:43
【问题描述】:

一个简单的问题: 我正在使用

system("mkdir /some/dest/");

在我的节目中。如何在运行我的程序时禁用其在屏幕上的输出,因为如果目录存在,我会得到“mkdir:无法创建目录`/some/dest/':文件存在”

试图运行

system("mkdir /some/dest/ > /dev/null");

但是没用

谢谢

【问题讨论】:

  • 你为什么不直接从你自己的程序中调用mkdir函数呢?
  • @hvd 我这样做了,该函数是从代码中调用的。如果我没听错
  • 不,你是在调用system函数来执行mkdir程序,你不是在调用mkdir函数。
  • 是权限问题吗?您对该文件夹有写入权限吗?
  • 不,您正在调用 shell 命令。您应该直接调用 mkdir 函数而不使用 system

标签: c++ linux system


【解决方案1】:

考虑到mkdir (1) 本身只是mkdir (2) 系统调用的包装器,从 C 代码创建目录是一种奇怪的方式。

我建议使用mkdir (2)

附: (2) 我的意思是 man 文档类别 ($ man 2 mkdir),这是系统调用的类别。

【讨论】:

    【解决方案2】:

    有两个流,stdout 和 stderr。您只重定向 strout,而不是 stderr。

    您还需要将 stderr 重定向到 /dev/null;阅读您的外壳手册。在 bash 中,我认为你可以这样做:

    mkdir /some/dest/ &> /dev/null
    

    这回答了您关于如何在调用 system() 时隐藏错误消息的问题,但其他答案的建议(使用本机 C 函数 mkdir)更符合 C/C++ 习惯。

    【讨论】:

    • 据我所知,这是完全有效的 POSIX sh,但具有不同的含义:首先,在后台运行 mkdir /some/dest/ (&),然后不向 /dev/null 写入任何内容。我至少知道其他 shell 会这样解释它。
    • @hwd:bash 示例取自tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-3.html
    • 我没有发表评论是因为它不适用于 bash,我发表评论是因为你在调用 system 时真的不应该假设 bash。 billz 的答案使用>/dev/null 2>&1,它在 bash 中同样有效,并且具有额外的好处,即当(例如)dash 安装为/bin/sh 时不会中断。
    • 我不假设 bash 并特别告诉 OP 阅读他的 shell 手册。如果您有一个适用于所有外壳的建议,欢迎提出。
    猜你喜欢
    • 2012-09-23
    • 1970-01-01
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多