2011-12-28 54 views
2

在這裏,我從某處獲取了一個程序來從控制檯讀取系統調用的輸出。 但獲取的錯誤消息我在fp = popen("ping 4.2.2.2 2>&1", "r");這一行,而不是fp = popen("ping 4.2.2.2", "r");在運行系統命令和從控制檯獲取輸出時出現混亂

使用2>&1所以可能有人解釋我什麼是的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; 
} 
+2

'2>&1'將'stderr'輸出重定向到'stdout',所以在標準輸出流中接收到錯誤流的消息。如果你在控制檯上運行它,通常'stderr'和'stdout'都會輸出到控制檯。 –

+0

意味着使用2>&1我們可以將錯誤消息轉換爲標準輸出消息? – user1089679

+0

@ user1089679 no convert..it表示我們將stderr的輸出重定向到stdout –

回答

1

0=stdin; 1=stdout; 2=stderr

如果你做2>1,將所有stderr重定向到一個名爲1的文件。要實際重定向stderrstdout,您需要使用2>&1&1表示將句柄傳遞給stdout

這已經詳細討論了here

+0

非常感謝GUD的回答 – user1089679

相關問題