当前位置:  开发笔记 > 编程语言 > 正文

po> 2&1对popen做了什么?

如何解决《po>2&1对popen做了什么?》经验,为你挑选了1个好方法。

2>&1导致popen陷阱stderr.

我想了解它是如何工作的.

2,>,&1在这里扮演什么角色?
我需要学习什么来理解它们?



1> P.P...:

它是一个shell构造.这意味着将stirect(>)stderr(2)重定向到stdout(1)所在的位置.1是文件的stdout文件描述符,2stderr文件描述符.

$ command 2>&1 #redirect stderr to stdout

$ command 1>&2 #redirect stdout to stderr

$ command 1>output 2>errors #redirect stdout to a file called "output"
                            #redirect stderr to a file called "errors"

popen()仅捕获stdout.因此,使用命令运行无法捕获来自其的消息stderr.

例如,用

  FILE *fp = popen("command", "r");

stdoutcommand可以被捕获(读取使用fp).但有了这个

  FILE *fp = popen("command 2>&1", "r");

stdout并被stderr捕获.但是通过这种重定向,它们stdout是无法区分的,stderr因为它们都是混合的.


效果与dup2(1,2);C 相同.

考虑

#include 
#include 

int main(void)
{
   dup2(1,2);
   fprintf(stdout, "printed to stdout\n");
   fprintf(stderr, "printed to stderr\n");
}

如果这是编译并运行如下:

# ./a.out >output

这两行都将打印到一个名为的文件中output.

如果通过注释掉dup2()行来运行代码.现在只有第一行将打印到文件,第二行将打印在控制台上,即使它只捕获stdout使用重定向(>).

其他来源:

https://www.gnu.org/software/bash/manual/html_node/Redirections.html

http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-3.html

https://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/redirection.mspx?mfr=true

推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有