2013-02-05 36 views
4

我希望能夠將stderr重定向到C字符串,因爲我需要在我正在編寫的程序中使用字符串。 我想避免寫入文件(在硬盤上),然後讀取文件以獲取字符串。 完成這件事的最好方法是什麼?將標準錯誤重定向到C中的字符串

回答

2
  1. 將stderr重定向到標準輸出和管道到您的C程序。請參閱How to pipe stderr, and not stdout?
  2. 當然,請從您的C程序的stdin中讀取。

這是假設stderr來自另一個程序。如果要從程序和進程中捕獲所有stderr輸出,則在單獨的線程中通過fopen("/dev/stderr", "r")偵聽對stderr的寫入。

+0

我給這個鏡頭。 我想從程序內捕獲stderr並在同一程序中使用它,所以我會在stderr上使用fopen,然後重定向到stdout? – user1660675

12

你可以只使用setbuf()改變stderr的緩衝區:

#include <stdio.h> 

int main(void) 
{ 
    char buf[BUFSIZ]; 
    setbuf(stderr, buf); 
    fprintf(stderr, "Hello, world!\n"); 
    printf("%s", buf); 
    return 0; 
} 

打印:

Hello, world! 
Hello, world! 

注:流中的所有操作之前,你應該改變的緩衝區。

+0

噢,真好!不知道你甚至可以做到這一點! stdio中定義了「BUFSIZ」嗎? – mtahmed

+0

@mtahmed是的,手冊頁還有更多信息,如果你使用'setvbuf()' – iabdalkader

+0

,你也可以設置緩衝模式。我喜歡這個解決方案,我會在測試完成後接受。 – user1660675

-1

我給出了一個使用C++將stdout和stderr重定向到函數(每行調用)的解決方案。我知道這被標記爲C,但我的解決方案的內容使用POSIX api。

請參閱https://stackoverflow.com/a/25087408/364818

相關問題