I have a C program that uses PIPES to communicate with an external application.
I use EXECL for this:
execl(\"./errorprogram\",\"./errorprogram\", N
By default, Glibc will produce output on the process's controlling terminal, if one exists. It sounds like you want to set the environment variable LIBC_FATAL_STDERR_=1, which will instead send fatal errors to stderr always.
LIBC_FATAL_STDERR_=1