私は、PIPESを使って外部アプリケーションと通信するCプログラムを持っています。RUNTIME ERRORSをSTDERRにリダイレクトする方法は?
私はこのためにEXECLを使用:今、私はパイプ
dup2(fd[1], STDERR_FILENO);
そして、私は簡単なのPythonを使用していることをテストする場合の書き終わりに、すべてのSTDERRをリダイレクトするDUP2をもを使用している
execl("./errorprogram","./errorprogram", NULL);
スクリプトのような:
data = sys.stdin.read()
sys.stderr.write("Bad error\n")
私は喜んで "親"でそのエラーを読むことができます。私の問題のために今
:REALLOC文が上記にあっ故意である
#include<stdio.h>
#include<string.h>
void main(){
char szInput[1024];
char *badvar;
gets(szInput);
badvar = realloc(badvar, 100);
puts(szInput);
fflush(NULL);
}
:のは、私はそれでメモリリークなどの「無効なポインタ」エラーが発生しましたC「子プログラム」を持っているとしましょう(親が、唯一の子プロセスに影響を与えていないobvioulsy)プログラムが死ぬことを引き起こし、そして私は、実行時に次のようなエラーが発生します:のrealloc():無効
* glibcの ./errorを検出ポインタ:0xb77a5250 * *
全体staceトレースなど....
今、私はSTDERRに、このような任意のランタイムエラーを取得することができますどのように私は戻って、親への完全なトレースを読むことができますか?
「ランタイムエラーをSTDERRにリダイレクトする必要がありますか?確かに、親がそれらを記録することができるように、子供から提起されたこれらの忙しいエラーをキャッチすることは可能ですか?
任意のヘルプやアドバイスが大幅リントン
;-)
おかげ
をいただければ幸いです
こんにちは、信号についてのコメントのおかげで、私はそれを試してみる....私は単純に "リダイレクト"する方法があったと思っていたが、信号が唯一の方法なら、私は試してみる...ありがとう;-) –
あなたが望むように動作するソリューションを見つけたら、ここに投稿してください。私は知りたいと思うだろう。 – River
そうだけど、正直言って信号は今のところ唯一のアプローチだと思うが...もっと掘り下げる;-) –