QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1046|回复: 12

用popen函数,调用gcc编译器 返回的file内容是什么

[复制链接]
发表于 2004-5-24 09:36:17 | 显示全部楼层 |阅读模式
在linux下调用popen函数,参数是gcc,就是调用gcc,返回的值file里面是什么呀?
谢谢!!!
发表于 2004-5-24 10:57:25 | 显示全部楼层
就是屏幕上打印的东西。
(以后问题在这提就行了,别给我发站内短信)
回复

使用道具 举报

 楼主| 发表于 2004-5-24 11:06:56 | 显示全部楼层
不好意思刚才又给你信箱里回复了
我在kdevelop下运行时 你所说得屏幕上打印的东西是不是下面输出结果框里的内容啊
回复

使用道具 举报

 楼主| 发表于 2004-5-24 19:57:32 | 显示全部楼层
这个文件我读出来以后好像都是乱码,是不是二进制文件啊
回复

使用道具 举报

 楼主| 发表于 2004-5-24 21:39:48 | 显示全部楼层
为什么这个文件读出来都是乱码呀?
回复

使用道具 举报

发表于 2004-5-24 22:10:50 | 显示全部楼层
?不会呀
回复

使用道具 举报

 楼主| 发表于 2004-5-24 22:50:06 | 显示全部楼层
下面是我的代码
FILE *fp;
fp=popen("/usr/bin/gcc /root/chenxiao/cx.c","r");
char line[130];
while(fgets( line, sizeof(line), fp))
   {
     printf("%s",line);
   }
pclose(fp);
回复

使用道具 举报

发表于 2004-5-25 00:57:52 | 显示全部楼层
我拿你的代码编译了一下,没有什么问题啊,出现的是限不够的错误,因为我是用普通用户登录的,没有权限访问/root下面的东西,本来运行gcc也是这种效果的.

但是出现权限不够不是printf出来的东西,通过fp=popen得到的东西只是stdout的,而如果程序出错的话一般是送到stderr来显示的.
回复

使用道具 举报

 楼主| 发表于 2004-5-25 09:26:20 | 显示全部楼层
那你打印出来的东西是不是 告诉你gcc编译的文件的编译结果
比如 什么 警告 报错之类的?
回复

使用道具 举报

 楼主| 发表于 2004-5-25 09:37:34 | 显示全部楼层
你试着将printf("%s",line); 这行去掉
是不是运行以后还是和以前一样?
回复

使用道具 举报

发表于 2004-5-26 00:12:02 | 显示全部楼层
去掉printf()是程序运行的结果是一样的,不是给你说了吗,fp=fopen()得到的是stdout的东西,而如果编译出错的话,出错信息并不是写到stdout,而是stderr的,所以你用fp=fopen得不到的,而编译的结果输出到stdout就是空的,就好比你用gcc编译一个完全没有错误的程序而输入的结果没有任何显示一样.
回复

使用道具 举报

 楼主| 发表于 2004-5-26 09:37:23 | 显示全部楼层
那该怎样得到stderr呢?
谢谢!
回复

使用道具 举报

发表于 2004-5-26 22:45:13 | 显示全部楼层
[quote:a5125c2667="cxjacky"]那该怎样得到stderr呢?
谢谢![/quote]
这个我也说不好了,一个比较笨的方法可以在你的程序中引用stderr这个变量.
[code:1]
#include<stdio.h>
extern FILE *stderr;
[/code:1]

这样你从这个文件中读东西就可以得到stderr中的东西,但是这样有一个问题就是它得到的是所有stderr中的东西,也就是说即使送到stderr中的东西不是你调用gcc出来的也会得到,并不是这个管道特有的stderr.

请高手指点吧
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-8 06:34 , Processed in 0.045867 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

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