BusyBox如何逃避我的stdout重定向,我能解决吗?



我有一个基于BusyBox的系统,另一个是香草Ubuntu LTS。

我编写了一个c++程序,它以main()的argv[1]作为命令名,在子进程中fork()和execl()该命令。就在前面,我执行了dup2()来重定向子进程的标准输出,类似于此,因此父进程可以read()它的输出。然后,从子进程读取的文本被写入控制台,并带有标记,以查看是父进程输出的。

现在如果我以"dd——help"作为参数来运行这个程序,那么会发生两件不同的事情:

  • 在Ubuntu系统中,输出显然来自父进程(并且只有)
  • 在BusyBox系统上,父进程不读取任何内容,dd的输出直接写入控制台,显然绕过了我的(尝试)重定向。

由于BusyBox系统上的所有小命令都是指向一个BusyBox可执行文件的符号链接,因此我认为可能存在问题,因此我还尝试从" BusyBox dd -help"中创建一个子进程。但这并没有改变什么。

但是:如果我执行"busybox——help",所有的输出都被子进程捕获,除了"之外没有任何"泄漏。它。(注意我漏掉了"子命令")

发生这种情况的原因是什么,以及(如何)使其在BusyBox系统上也按预期工作?

Busybox正在输出自己的输出,例如,当使用诸如——help之类的选项调用它时,在stdout上。但是它实现的命令,比如"dd",是在stderr上输出的——即使它不是错误,我发现这相当不直观,因此一开始没有考虑到这一点。

最新更新