日期:2014-05-16  浏览次数:20806 次

再问:如何将标准输出(stdout)的内容读取到文件里
我想把一个程序运行过程中在终端输出的一些信息读取到一个文件里,然后进行一些处理,请问如何实现?
前两天问过这个问题,有人提供了用popen(const   char*   command,const   char   *   type),可是应该用那一个command才能截获标准输出(stdout)的内容呢?请各位大侠不吝赐教,谢谢了

------解决方案--------------------
运行这个程序的时候 io 重定向一下呗~ > >
------解决方案--------------------
重定向阿:
程序 > /tmp/msg.out

------解决方案--------------------
程序1
FILE *ptr;
if ((ptr = popen( "ps -ef ", "r ")) != NULL) {
while(fgets(buf, BUFSIZ, ptr) != NULL) {
...
msgsnd(...); //将消息读取出来用msgq发送出去。
...
}
}
程序2
while(1){
msgrcv(...); //接收消息
... //其他处理
}

给你提供个思路,具体实现你自己来解决吧
呵呵
------解决方案--------------------
一个read,一个write ,没关系吧~~~ 或者,干脆,来个管道得了~
------解决方案--------------------
典型的管道。
------解决方案--------------------
管道的不需要一个一个的改了。
------解决方案--------------------
FILE *fp;
char buff[2000];
fp =popen ( "这里是你的执行程序 ", "r ")
memset ( buff , 0 , sizeof(buff) );
while ( !feof(fp) )
{
fgets ( buff , 1000 , fp ) ; //读一行
puts ( buff );
...
}
明白了么?
------解决方案--------------------
再开个有名管道即可,不要再folk了

天地无极,乾坤借法
------解决方案--------------------
上面说错了,写了个测试程序:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <unistd.h>


int main()
{
int fd, stdout_fd= fileno(stdout);
fd = open( "xxxooo.txt ", O_CREAT|O_RDWR, 0666);

close(stdout_fd);
dup2(fd, stdout_fd);
printf( "hello, world.\n ");

close(fd);
return 0;
}