环境:嵌入式系统,linux,c。
第三方模块和我自己的模块将使用printf()在终端/控制台上打印信息。我怎样才能禁止在终端/控制台上显示这些信息? (注意我不能评论那些printf(),因为有些是在第三方模块中)我可以将终端设置为某种模式,以便不显示任何内容吗? (类似于系统(“stty sane”),也许?)或者我需要使用ioctl()吗?请帮帮我......
非常感谢!
答案 0 :(得分:6)
如果你想在运行程序时没有看到输出,你可以像这样重定向它的输出:
./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
并不是一个好主意,尽管将其重定向到文件可能会有所帮助。
如果您要重定向stdout
和stderr
,可以将stderr
重定向到stdout
,将stdout
重定向到/dev/null
,如下所示:
./program > /dev/null 2>&1
(注意重定向的顺序)
答案 1 :(得分:1)
您指的是调试端口吗?如果是这样,您可以重建内核以使其没有调试端口,或者至少禁用它。
如果你在谈论shell--这没有任何意义,对吧?如果禁用shell,您如何访问设备?正如Shahbaz所说,它不太可能存在。更好的选择是阻止用户访问shell。
也许你可以解释一下你正在尝试做什么,以及你的设备如何工作,或至少如何访问它。
<强>更新强>
好的 - 我们的主板有一个Web界面,我们使用它(密码保护)来启用/禁用连接到调试端口的ssh服务器。这听起来就像你想要的那样。