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