请教freebsd下,怎么获取popen stderr输出
- int main(int argc, char *argv[])
- {
- int fd;
- FILE *fp;
- char buf[1024];
- fp = popen("ll 2>&1", "r");
- fd = open("debug", O_CREAT|O_WRONLY);
- memset(buf, 0, 1024);
- while(fgets(buf, 1023, fp) != NULL)
- {
- write(fd, buf, strlen(buf));
- }
- close(fd);
- chmod( "debug",0777);
- pclose(fp);
- return 0;
- }
复制代码这段代码在linux下就很正常。能把stderr 重定向到 stdout。然后再获取报错信息写到文本里
但是在这段代码,在freebsd下运行,"ll: not found" 这样的出错信息直接打印在屏幕上。
请问在freebsd下,该怎么写
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
![扫码二维码加入Web技术交流群](/public/img/jiaqun_03.jpg)
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
Linux上的ll是这样的
alias ll='ls -l --color=tty'
freebsd上没有
不是,我是popen 执行shell命令出错的时候,能获取stderr 的出错信息。
linux下,我把 stderr 重定向到stdout 没问题。
freebsd 重定向不了?
ll这样的命令你都没有,又怎么运行呢?用ls -l来吧
我搞定了,我重写了个 popen
我的意思是 popen执行到 这个 "ll" 出错的命令时,我能捕获到这个错误信息。
回复 5# 我要思考
请教,怎样实现啊?我也碰到这个问题
在Unix/like的这个黑暗世界里,只有沿着path这条光束,才能找到光明。