我有一個C程序使用PIPES與外部應用程序進行通信。如何將RUNTIME ERRORS重定向到STDERR?
我用EXECL此:
execl("./errorprogram","./errorprogram", NULL);
現在我也用DUP2所有STDERR重定向到管道的書寫端
dup2(fd[1], STDERR_FILENO);
如果我測試使用一個簡單的Python腳本如:
data = sys.stdin.read()
sys.stderr.write("Bad error\n")
我可以高興地讀回「父母」中的錯誤。
現在對於我的問題:比方說,我有一個C「兒童計劃」已經在它的內存泄露或類似「無效指針」錯誤:
#include<stdio.h>
#include<string.h>
void main(){
char szInput[1024];
char *badvar;
gets(szInput);
badvar = realloc(badvar, 100);
puts(szInput);
fflush(NULL);
}
上面的realloc的說法是故意在那裏導致程序死了,我會得到一個錯誤,如在運行時以下(obvioulsy父不受影響,只有子進程):
* glibc的檢測 ./error:realloc的():無效指針:0xb77a5250 * *
而且整體斯特斯跟蹤等....
現在,我怎樣才能得到任何運行時錯誤像這樣STDERR,所以我可以閱讀完整回溯到父?
是否必須將「運行時錯誤重定向到STDERR」?當然,有可能從孩子那裏得到這些忙碌的錯誤,以便父母可以登錄他們等等。
任何幫助或提醒將不勝感激;-)
感謝
林頓
您好,感謝您對信號的評論,我會試試....我希望有一種方法可以簡單地「重定向」,但我想如果信號是唯一的方法,那麼我會試試看...謝謝;-) – 2010-11-27 06:36:27
如果您確實找到了一種您想要的行爲,請將其發佈到此處。我有興趣知道。 – River 2010-11-27 07:33:01