File *pp = popen("which abc", "r")在linux 下使用问题

hg81232463 2010-03-17 03:23:24
如上,我调用:
popen("which abc", "r") 在 linux 下会直接输出到终端上,就是说,我还没有调用 fgets() ,如果 abc 命令不存在,则已经自动输出了。但是,在 unix 下就不会,可以在调用 fgets() 的时候得到错误,比如, which: no abc 这样的形式
想请教各位,是什么原因,应该如何解决?
我猜是这样的原因:
1>这个popen 的定义 linux 和 unix 不同,确实也不同,linux 下如:
extern FILE *popen (__const char *__command, __const char *__modes) __THROW;
unix 下没有 __THROW;

但是,此时我做了异常捕捉,没用, 如下:
try
{
pp = popen("which aCC", "r") ;
}
catch(...)
{};

2>我的终端设置有问题

这个
...全文
110 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
mymtom 2010-03-19
  • 打赏
  • 举报
回复
道理还是一样啊
make > make.log 2>&1

hg81232463 2010-03-19
  • 打赏
  • 举报
回复
这个问题我是这样处理的,我现在的处理方法是: which aCC > log.tmp 2>&1
然后通过读取 log.tmp 的方式来处理的。不过谢谢楼上的,等到结帖的时候给分。
呵,不过现在又遇到另外的问题了。。就是 ar 指令。。。
在 make 的时候,
ar: creating /abc/lib.a 类似这样的指令还是会显示出来,无法完全不显出来。。。我想如果完全不显示在屏幕上,是不是只能用 nohup 的方式?不过 nohup 很麻烦,还是专门去判断 nohup 是否已经完成,各位可有办法?
mymtom 2010-03-17
  • 打赏
  • 举报
回复
这个和popen没有什么关系吧。
关键在于which命令本身。
Unix(比如AIX), 如果abc命令不存在, 错误信息会在标准输出显示。
但是Linux不同,如果abc命令不存在, 错误信息会在标准错误显示。

popen(..., "r")会得到标准输出的内容,但是不会得到标准错误的输出。

如果想消除这个差异可以用
popen("which abc 2>&1", "r")
这样可以把标准错误也合并到标准输出

65,206

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧