请教freebsd下,怎么获取popen stderr输出

发布于 2022-10-15 08:02:08 字数 1243 浏览 22 评论 0

  1. int main(int argc, char *argv[])
  2. {
  3.         int  fd;
  4.         FILE *fp;
  5.         char buf[1024];
  6.        
  7.        
  8.         fp = popen("ll 2>&1", "r");
  9.         fd = open("debug", O_CREAT|O_WRONLY);
  10.         memset(buf, 0, 1024);
  11.         while(fgets(buf, 1023, fp) != NULL)
  12.         {
  13.                 write(fd, buf, strlen(buf));
  14.         }
  15.         close(fd);
  16.         chmod( "debug",0777);
  17.         pclose(fp);
  18.        
  19.         return 0;
  20. }

复制代码这段代码在linux下就很正常。能把stderr 重定向到 stdout。然后再获取报错信息写到文本里
但是在这段代码,在freebsd下运行,"ll: not found" 这样的出错信息直接打印在屏幕上。
请问在freebsd下,该怎么写

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

只为一人 2022-10-22 08:02:08

Linux上的ll是这样的

alias ll='ls -l --color=tty'

freebsd上没有

慕烟庭风 2022-10-22 08:02:08

不是,我是popen 执行shell命令出错的时候,能获取stderr 的出错信息。
linux下,我把 stderr 重定向到stdout 没问题。
freebsd 重定向不了?

热鲨 2022-10-22 08:02:08

ll这样的命令你都没有,又怎么运行呢?用ls -l来吧

层林尽染 2022-10-22 08:02:08

我搞定了,我重写了个 popen
我的意思是 popen执行到 这个 "ll" 出错的命令时,我能捕获到这个错误信息。

一瞬间的火花 2022-10-22 08:02:08

回复 5# 我要思考

请教,怎样实现啊?我也碰到这个问题

櫻之舞 2022-10-22 08:02:08

在Unix/like的这个黑暗世界里,只有沿着path这条光束,才能找到光明。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文