Как правило, вы не можете поймать -given FILE*
handle-, файловый режим, в смысле fopen
, с помощью переносимой программы на языке C.
Например, ваш FILE*
может бытьполучены с popen
, fmemopen
, open_memstream
, fdopen
и т. д. и могут быть доступны только для чтения или только для чтения.Возможно, он даже не имеет действительного дескриптора файла, заданного fileno
.
. Вам следует принять и определить и соглашения о документе о них.
Например, в Linux сокет может быть доступен для чтения и записи на уровне операционной системы, и вы можете иметь два разных дескриптора FILE*
(используя fdopen
) для чтения и для записи.,
И, конечно же, дескриптор FILE*
не может использоваться после fclose
(или pclose
)
Так что гипотетическая процедура fprint_stuff(FILE*, struct stuff_st*)
должна документировать, что первый аргумент доступный для записи дескриптор файла, и он просто вызовет fwrite
и fprintf
, но должен проверить, что они не потерпели неудачу.