Мой вопрос в основном связан с использованием fileno () для получения fd для этого потока.Это заставило меня подумать, что файловые потоки как-то связаны с fd.
Они есть.
Функции в <stdio.h>
обычно реализуются как обертка вокруг низкоуровневых ОС.конкретные функции.Это требует некоторого учета.Структура стандарта FILE
должна отслеживать «как ОС обращается к потоку» (т. Е. В системах POSIX, дескриптор файла), а также любые буферы, связанные с потоком, индексирует эти буферы, нужно ли файлуудаляется после закрытия (tmpfile()
), независимо от того, должны ли эти буферы быть free()
d (потому что библиотека распределила их) или нет (потому что пользователь выделил их и связал их с потоком через setvbuf()
), многобайтовое кодированиесостояние потока и, начиная с C11, мьютекс, с помощью которого можно заблокировать поток во время операций для обеспечения безопасности потока.
fileno()
является функцией, специфичной для POSIX, для получения дескриптора файла изFILE
struct , с любым доступом к этому существу без знания стандартной библиотеки.Приводя к стандартным функциям библиотеки, имеющим иное представление о состоянии потока, чем у операционной системы, это может сыграть в шутку с вашей программой.
Не смешивайте POSIX и стандартдоступ к файлу, если вы точно не знаете, что делаете.