我希望能夠將stderr重定向到C字符串,因爲我需要在我正在編寫的程序中使用字符串。 我想避免寫入文件(在硬盤上),然後讀取文件以獲取字符串。 完成這件事的最好方法是什麼?將標準錯誤重定向到C中的字符串
回答
- 將stderr重定向到標準輸出和管道到您的C程序。請參閱How to pipe stderr, and not stdout?
- 當然,請從您的C程序的stdin中讀取。
這是假設stderr來自另一個程序。如果要從程序和進程中捕獲所有stderr輸出,則在單獨的線程中通過fopen("/dev/stderr", "r")
偵聽對stderr的寫入。
你可以只使用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!
注:流中的所有操作之前,你應該改變的緩衝區。
噢,真好!不知道你甚至可以做到這一點! stdio中定義了「BUFSIZ」嗎? – mtahmed
@mtahmed是的,手冊頁還有更多信息,如果你使用'setvbuf()' – iabdalkader
,你也可以設置緩衝模式。我喜歡這個解決方案,我會在測試完成後接受。 – user1660675
我給出了一個使用C++將stdout和stderr重定向到函數(每行調用)的解決方案。我知道這被標記爲C,但我的解決方案的內容使用POSIX api。
- 1. Powershell將標準輸出重定向到標準錯誤
- 2. 重定向標準錯誤
- 3. 從C#重定向原生dll標準輸出/標準錯誤#
- 4. 將標準輸出從進程(msxsl.exe)重定向到VB.NET中的字符串
- 5. Ant exec:將標準重定向但不是標準錯誤
- 6. 重定向標準輸出/標準錯誤到UNIX下的C++文件 - 再次
- 7. 標準錯誤重定向到標準輸出
- 8. zsh:重置標準輸出/標準錯誤重定向
- 9. Bash標準錯誤重定向
- 10. Xinetd禁用標準錯誤重定向
- 11. 錯誤重定向標準輸出
- 12. 如何標準輸出重定向到一個字符串在ANSI C
- 13. 將slf4j重定向到字符串
- 14. 將字符串重定向到scala.sys.process
- 15. 將stderr重定向到C中的文件和標準輸出
- 16. 將stderr重定向到c shell中的標準輸出
- 17. C#與重定向標準錯誤的問題
- 18. 將查詢字符串重定向到非查詢字符串?
- 19. 關於標準輸出/標準錯誤重定向
- 20. 捕捉「標準輸入重定向的文件位置字符串」在C
- 21. C++向量的字符串段錯誤
- 22. C:重定向標準輸入,標準輸出到管道
- 23. 如何暫時將printf輸出重定向到c字符串?
- 24. 將標準C++字符串轉換爲字符串^
- 25. 如何在啓動時重定向標準錯誤*不重定向標準輸入和標準輸出?
- 26. 將父進程的控制檯(標準輸出,標準錯誤等)輸出重定向到子進程(反向)
- 27. 如何將Getopt錯誤消息的輸出重定向到字符串?
- 28. C - 從標準輸入讀取字符串&int(或從文件重定向)
- 29. 從腳本重定向標準錯誤命令生成錯誤
- 30. C從標準錯誤讀取字符串
我給這個鏡頭。 我想從程序內捕獲stderr並在同一程序中使用它,所以我會在stderr上使用fopen,然後重定向到stdout? – user1660675