GW>>pid_t exec_redirect(const char *path, char *const args[], int& wr_fd, int rd_fd)
D>почему порядок то сперва read потом write, а тут наоборот.
Не очень понял вопроса.
GW>> char *const args[] = {"/bin/gzip", "gzip", "-f", "-", NULL};
D>что это за второй аргумент args[1] "gzip", не понимаю что он значит.
Да, тут мой косяк. Ввел в заблуждение man: "The first argument, by convention, should point to the filename, associated with the file being executed". Подумалось, что имеется ввиду первый член args[].
А вообще, проблема решилась. Оказалось, не все неиспользуемые файловые дескрипторы в новых процессах закрывал. Хотя, нашел решение проще и по-моему красивее: запустил shell с командой а-ля
gzip — | openssl enc
и уже шеллу подменил стандартный ввод и вывод.