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
而不使用它的效果。