【问题标题】:How to not let terminal display anything?如何不让终端显示任何内容?
【发布时间】:2011-12-31 16:28:11
【问题描述】:

环境:嵌入式系统,linux,c。

第三方模块和我自己的模块将使用 printf() 在终端/控制台上打印信息。如何禁止在终端/控制台上显示这些信息? (请注意,我不能评论那些 printf() 因为有些在第三方模块中)我可以将终端设置为某种模式以便什么都不显示吗? (类似于系统(“stty sane”),也许?)还是我需要使用 ioctl()?请帮帮我...

非常感谢!

【问题讨论】:

    标签: c console embedded terminal


    【解决方案1】:

    如果你不想在运行程序时看到输出,你可以像这样重定向它的输出:

    ./program > /dev/null
    

    /dev/null 是一种特殊的装置,它会吃掉你喂它的所有东西(就像一个黑洞)。 > 将输出(stdout)重定向到文件。将输出重定向到 /dev/null 意味着所有内容都写入到 /dev/null 并且对它没有任何作用,因此您实际上会丢弃您的输出。

    如果你想在程序本身做,你可以调用freopen,你可以重新打开stdout/dev/null,得到同样的效果。像这样:

    freopen("/dev/null", "w", stdout);
    

    旁注:要重定向stderr,而不是>,你可以使用2>freopen,当然你重新打开stderr。将stderr 重定向到/dev/null 并不是一个好主意,尽管将其重定向到文件可能会有所帮助。

    如果您想同时重定向stdoutstderr,您可以将stderr 重定向到stdoutstdout/dev/null,如下所示:

    ./program > /dev/null 2>&1
    

    (注意重定向的顺序)

    【讨论】:

    • 感谢沙巴兹。但是设备上正在运行多个程序/进程,我无法做到这一点。这就是为什么我在想我是否可以直接对终端做一些事情,这样什么都不会显示
    • 所以您的意思是,您无权访问代码,而且您不是在命令行中运行它们的人?
    • 听起来如果你能做到这一点,你什么都看不到,甚至屏幕上的外壳本身也看不到,这使得外壳几乎毫无用处。所以我怀疑这样的事情是否存在。
    • 恐怕我不知道。就像我说的那样,这也没有多大意义,我建议您尝试另一种方法(例如,推动运行这些程序的人简单地重定向他们的输出。)请注意,如果您使用的是像这样冗长的库,您仍然可以在您的main 中使用freopen,并且当您链接到该库并执行时,不会有问题
    • 我想这样做的原因是,我不希望黑客在他们设法将控制台连接到我们的设备时看到任何输出信息。请帮忙,有人吗??
    【解决方案2】:

    你指的是调试端口吗?如果是这样,您可以重新构建内核,使其没有调试端口,或者至少禁用它。

    如果您在谈论外壳 - 这没有任何意义,对吧?如果外壳被禁用,您如何访问您的设备?正如 Shahbaz 所说,它不太可能存在。更好的选择是阻止用户访问 shell。

    也许您可以详细说明您正在尝试做什么,以及您的设备是如何工作的,或者至少是如何访问它的。

    更新:

    好的 - 我们的开发板有一个 Web 界面,我们使用它(密码保护)来启用/禁用连接到调试端口的 ssh 服务器。听起来这就是你想要的。

    【讨论】:

    • 谢谢杰夫。是的,我说的是通过串行连接将 PC 连接到设备控制台。我们作为开发人员使用它来调试我们的程序,但黑客也可以通过相同的端口连接到设备。所以我希望能够打开和关闭 shell - 当开发人员或系统管理员想要访问它时它会打开,但是如果黑客连接到它,我们将不会向他显示任何信息。
    猜你喜欢
    • 2013-09-03
    • 2018-12-22
    • 1970-01-01
    • 2021-10-23
    • 2014-06-10
    • 1970-01-01
    • 1970-01-01
    • 2012-09-29
    • 2020-11-10
    相关资源
    最近更新 更多