Можно, например, создать именованные пайпы (google: mkfifo).
Сделаем тестовую прогу test_redir.c следующего содержания:
#include <stdio.h>
int main()
{
fprintf(stdout,"Test STDOUT\n");
fprintf(stderr,"Test STDERR\n");
return 0;
}
Собрали, подготовили к запуску.
$ gcc test_redir.c -o test_redir
$ chmod +x test_redir
Теперь создадим пайпы:
$ mkfifo test_out
$ mkfifo test_err
Запустим
$ ./test_redir 1>test_out 2>test_err
Теперь в двух новых терминалах посмотрим, что в пайпах:
$ cat tmp/test_out
Test STDOUT
$ cat tmp/test_err
Test STDERR
Это плохой пример, поэтому в первом терминале вывод появится только после того, как мы посмотрим, что в пайпе test_err, но идея должна быть ясна.