Как я могу использовать fprintf и писать в канал?
Вопрос
Я создал канал и использовал dup2 () для перезаписи потоков 1 & amp; 2 (stdout & Amp; stderr) в эти каналы.
Теперь я хочу использовать fprintf для записи в поток 1 или 2, но моя программа, похоже, не получает ничего на другой стороне канала. Я пытался использовать printf (), но я не уверен, что это пишет в стандартный вывод или поток 1 по умолчанию. Если он пишет в поток 1, я думаю, это проблема где-то в моем коде.
По сути, я спрашиваю, учитывая int, представляющий поток, как я могу получить FILE *, подходящий для использования в fprintf ()?
Решение
Если у вас есть файловый дескриптор и вы хотите FILE*
, вы можете использовать fdopen
FILE *fdopen(int fd, const char *mode);
man fdopen
является функцией Posix и задокументирована в <= >. Чтобы сделать обратное, вы можете использовать fileno