3

我有一个嵌入式应用程序,我想要一个简单的记录器。

系统从一个脚本文件开始,该文件依次运行应用程序。脚本无法运行应用程序可能有多种原因,或者应用程序本身可能无法启动。要远程诊断此问题,我需要从脚本和应用程序中查看标准输出。

我尝试编写一个类似 tee 的记录器,它将其标准输入重复到标准输出,并将文本保存在 FIFO 中以供以后通过网络检索。然后我天真地尝试

./script | ./logger  

我最终只有脚本标准输出进入记录器,而应用程序标准输出消失了。我尝试 tee 也有类似的结果。

系统正在运行内核 2.4.26 和busybox。

发生了什么事,我怎样才能实现我想要的目标?

4

2 回答 2

4

事实证明,它的工作方式与我认为的完全一致,只是有一个小问题。stdout 被缓冲,并且没有任何 fflush(stdout) 命令,我从未见过它。如果我真的有耐心,当标准输出缓冲区填满时,我会突然看到大量输出。调用 setlinebuf(3) 解决了我的问题。

于 2012-10-03T04:49:09.543 回答
0

显然,应用程序输出并没有最终出现在标准输出上...​​...

  1. 输出实际上在 stderr 上(通常连接到终端)

       ./script.sh 2>&1 | ./logger
    

    然后应该工作

  2. 应用程序主动断开与 stdin/stdout 的连接(例如,通过关闭/重新打开文件描述符 0,1(,2) 或使用nohupexec类似实用程序)

  3. 脚本守护进程(它也与所有标准流分离)

于 2012-09-27T23:54:38.297 回答