LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 861|回复: 6

关于输出重定向的问题!

[复制链接]
发表于 2003-7-11 17:59:38 | 显示全部楼层 |阅读模式
对于一般的linux命令,可以用如下的代码实现:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
        FILE* pipein_fp, *pipeout_fp;
        char readbuf[81];
        readbuf[80] = 0;

        //if ((pipein_fp = popen("javac test.java", "r")) == NULL)
        if ((pipein_fp = popen("ls", "r")) == NULL)
        {
                perror("popen");
                exit(1);
        }

        while(fgets(readbuf, 80, pipein_fp))
                printf("readbuf = %s", readbuf);

        pclose(pipein_fp);
}

但是当把应用程序改成javac以后所有的输出都不能截获!
怀疑可能是javac不是输出到stdout!
不知道有谁有方法能把所有的输出都截获呢?
请指教!
谢谢!
发表于 2003-7-11 22:19:02 | 显示全部楼层
javac如果运行成功就没有输出,如果有输出就是有错误,是输出到stderr
自由狼-台风 该用户已被删除
发表于 2003-7-12 14:43:51 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| 发表于 2003-7-14 10:16:27 | 显示全部楼层
那stderr怎么才能截获啊?
 楼主| 发表于 2003-7-14 10:19:41 | 显示全部楼层
to 自由狼-台风:
test.java输出的可以截获。
看来javac的错误消息是发送到stderr上了!
stderr怎么样才能被截获啊?
发表于 2003-7-14 10:43:52 | 显示全部楼层
可以用"javac test.java 2>&1",把stderr定向到stdout,不过这样就把stdout和stderr的输出混到一起了,对一般程序不太好,javac还行。
标准的方法是用pipe()、fork()、exec()系统调用,不过代码就比较多。
 楼主| 发表于 2003-7-14 16:36:19 | 显示全部楼层
使用这个先"javac test.java 2>&1"
多谢斑竹!
:)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表