У меня есть программа на C, которая использует PIPES для связи с внешним приложением.
Я использую EXECL для этого:
execl("./errorprogram","./errorprogram", NULL);
Теперь я также использовал DUP2 для перенаправления всех STDERR на конец записи канала
dup2(fd[1], STDERR_FILENO);
И если япроверьте, что с помощью простого скрипта Python, например:
data = sys.stdin.read()
sys.stderr.write("Bad error\n")
, я могу с радостью прочитать эту ошибку обратно в "parent".
Теперь по моей проблеме: допустим, у меня есть дочерний элемент 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 PARENT не затрагивается, только процесс CHILD):
* обнаружен glibc ./error: realloc (): неверный указатель: 0xb77a5250 **
И целая трассировка трасс и т. Д.
Теперь, как я могу получить любые ошибки времени выполнения, подобные этой, в STDERR, чтобы я мог прочитать полную трассировку обратно в родительский?
Нужно ли перенаправлять «ошибки времени выполнения в STDERR»?Конечно, можно уловить эти суетливые ошибки, возникшие у ребенка, чтобы родитель мог их записать и т. Д.?
Любая помощь или совет будет принята с благодарностью; -)
Спасибо
Линтон