我有一个调用另外一个C程序,就像如何捕获输出?
system("path/program2 path/file.txt");
使程序可以处理指令文件。该程序提供了我想在我的C程序中使用的信息,但我没有“program2”的源,因此我无法编辑它。
目前我正在编写一个文件(我可以选择在控制台上显示信息或写入文件之间进行选择),然后在我的C程序中打开文件然后阅读,但我想也许这是可能的使它更好,但我真的生锈的C ...
任何人都可以提供一些想法和/或建议吗?
谢谢!
编辑
你们有些人建议,我看着fork()
,exec()
和dup2()
功能,我想我有一个更好的方法现在信息共享。
所以,到现在为止我有这样的:
- 程序1,使
system()
调用运行program2
- 程序2创建一个临时文件
temp.txt
和写入信息 - 回到程序1,它会打开
temp.txt
,读,操纵信息。
这使得2个开放式的和2个接近的现在
,与theese功能,我可以做
- 程序1,使开放的处理程序,以
temp.txt
- 程序1,使
fork()
自身复制 - on program1.child,调用
dup2()
函数将标准输入重定向到temp.txt
在program1.child一个
- 被调用运行
program2
- 程序2,使工作和显示的所有信息(将被重定向到
temp.txt
- 而这一切,program1.father将
wait()
直到program1.child结束 - 上月底,program.father将读取文件内容,并使用数据
exec()
功能
我觉得这个过程可能是有效的,但我仍然有一个缺陷 - 使用文件。
我想要这个程序在服务器上运行,所以我认为使用文件可能会令人困惑,甚至是危险的...但仍然这种方法比我使用的方式更好,直到我找到更好的东西我敢打赌我可以设法管理服务器端的文件创建...
所以,是“新”的程序是否有效?
最后编辑:
所以,用popen()
所有的问题就解决了。
FILE *in;
extern FILE *popen();
char buff[512];
if(!(in = popen("path/program2 path/file.txt", "r"))){
//error;
}
while(fgets(buff, sizeof(buff), in) != NULL){
printf("%s", buff);
}
pclose(in);
(从sw-at.com提取)
谢谢大家的帮助!今天我学到了一些东西!
请勿使用'system'。创建一个新的进程来执行'program2',并设置它的'stdout'来管道你的'program1'。 – StoryTeller
我只是谷歌它...你的意思是fork()函数? –
如果你在POSIX系统上,那么是的。如果没有,请参阅您的操作系统的开发者文档。 – StoryTeller