概述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的输出所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
请登录后查看评论内容