redirect一个subprocess的输出【JAVA教程】

!
也想出现在这里? 联系我们
信息

redirect一个subprocess的输出,第1张

概述redirect一个subprocess的输出

有几种redirectsubprocess输出的方法:

使用freopen(3)

使用dup(3)

使用popen(3)

如果所有人都想要的话,应该select什么样的方式来执行一个subprocess,并将其输出保存在一个给定的文件中,就像ls > files.txt 。

什么是通常使用的shell?

在应用程序中使用的volatilevariables

如何在C ++中安排任务

以xamarin格式将base64string绑定到ListvIEw

奇怪的CMD错误,只有当我的程序打开CMD

linux模拟到windows GetAsyncKeyState()

什么是vdso和vsyscall?

运行exe作为系统帐户

InternetCanonicalizeUrl无法解码变音符号

如何隐藏MahApps.Metro窗口中的closuresbutton?

在我的c ++程序中,有一种方法可以检查cpu是否具有AES-NI

你可以通过strace(1)找到你最喜欢的shell使用的shell。

在一个终端:

echo $$

在另一个终端:

strace -o /tmp/shell -f -p [PID from the first shell]

再次在第一个终端:

ls > files.txt

在第二个终端中, ^C strace(1)命令,然后编辑/tmp/shell输出文件,以查看它进行重定向所做的系统调用。

freopen(3) *** 纵C标准的IO file*指针。 所有这些将在execve(2)调用的另一端被抛弃,因为它保存在用户内存中 。 你可以在execve(2)调用之后使用这个,但是一般地使用会很麻烦。

popen(3)打开一个单向的pipe(7) 。 这是有用的,但非常有限 – 你得到标准输出描述符或标准输入描述符。 这将失败的东西像ls | grep foo | sort ls | grep foo | sort ls | grep foo | sort输入和输出必须重定向的地方。 所以这是一个糟糕的选择。

dup2(2)将管理文件描述符 – 一个内核实现的资源 – 所以它将在execve(2)调用中持续存在, 并且可以根据需要设置多个文件描述符,这对于ls > /tmp/output 2> /tmp/error或处理输入和输出: ls | sort | uniq ls | sort | uniq ls | sort | uniq 。

还有另一种机制: pty(7)处理。 forkpty(3) , openpty(3)函数可以管理专门为处理另一个程序而创建的新的伪终端设备。 Unix环境下的高级编程(第二版)在其源代码中有一个非常好的例子程序,但是如果你不明白为什么这会很有用,请看script(1)程序 – 它创建一个新的伪终端,并使用它来记录程序中的所有输入和输出,并将记录存储到文件中供以后回放或记录。 您也可以使用它来在交互式程序中编写脚本,类似于expect(1) 。

我期望主要使用dup2() 。

popen()和freopen()都不用于处理重定向,如3>&7 。 最重要的是,可以使用dup() ,但是3>&7示例显示了dup()开始吱吱作响的地方; 您必须确保文件描述符4,5和6在处理dup2()将会做的事情之前打开(而不是7)。

总结

以上是内存溢出为你收集整理的redirect一个subprocess的输出全部内容,希望文章能够帮你解决redirect一个subprocess的输出所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

© 版权声明
THE END
喜欢就支持一下吧
点赞184 分享
评论 抢沙发

请登录后发表评论

    请登录后查看评论内容