C 运行系统命令并从控制台获取输出时的混乱

C 运行系统命令并从控制台获取输出时的混乱,c,C,这里我从某处得到一个程序,从控制台读取系统调用的输出。 但是为了获取错误消息,我在fp=popen中使用了2>&1(“ping4.2.2.2>&1”,“r”)这一行,而不是fp=popen(“ping 4.2.2.2”,“r”) 那么有谁能解释一下上面这行中2>&1的意义是什么呢 这是我的密码 #include <stdio.h> #include <stdlib.h> int main( int argc, char *argv[] ) { FILE *fp;

这里我从某处得到一个程序,从控制台读取系统调用的输出。 但是为了获取错误消息,我在
fp=popen中使用了
2>&1
(“ping4.2.2.2>&1”,“r”)这一行,而不是
fp=popen(“ping 4.2.2.2”,“r”)

那么有谁能解释一下上面这行中
2>&1
的意义是什么呢

这是我的密码

#include <stdio.h>
#include <stdlib.h>


int main( int argc, char *argv[] )
{

  FILE *fp;
  int status;
  char path[1035];

  /* Open the command for reading. */
  fp = popen("ping 4.2.2.2 2>&1", "r");
  if (fp == NULL) {
    printf("Failed to run command\n" );
    exit;
  }

  /* Read the output a line at a time - output it. */
  while (fgets(path, sizeof(path)-1, fp) != NULL) {
    printf("%s", path);
  }

  /* close */
  pclose(fp);

  return 0;
}
#包括
#包括
int main(int argc,char*argv[])
{
文件*fp;
智力状态;
字符路径[1035];
/*打开命令进行读取*/
fp=popen(“ping 4.2.2.2>&1”,“r”);
如果(fp==NULL){
printf(“无法运行命令\n”);
出口
}
/*一次读取一行输出-输出它*/
while(fgets(path,sizeof(path)-1,fp)!=NULL){
printf(“%s”,路径);
}
/*接近*/
pclose(fp);
返回0;
}

0=stdin
<代码>1=标准输出
<代码>2=标准代码

如果执行
2>1
,则会将所有
stderr
重定向到名为
1
的文件。要将
stderr
重定向到
stdout
,需要使用
2>&1
&1
表示将句柄传递给
stdout


这一点已经过详细讨论。

2>&1
stderr
输出重定向到
stdout
,因此发送到错误流的消息在标准输出流中接收。如果您在控制台上运行此操作,通常情况下,
stderr
&
stdout
都将输出输出到控制台。这意味着使用2>&1我们可以将错误消息转换为stdout消息?@user1089679 no convert.。这意味着我们将stderr的输出重定向到stdoutno convert,它将重定向。有单独的输入、输出和错误流。如果要打印错误消息,通常会将其打印到
stderr
(类似于
fprintf
)。如果重定向,也会在
stdout
上看到此类消息。要查看此效果,请将
ping 4.2.2.2
更改为
ping 344.2.2
,这是一个错误。现在以
/a.out 2>/dev/null
的形式运行程序。现在,在使用和不使用
2>&1
的情况下进行尝试,您将看到使用
2>&1
而不使用它的效果。