Могут ли несколько объектов `FILE` использовать один и тот же файловый дескриптор? - PullRequest
0 голосов
/ 30 августа 2018

от APUE

Каждый стандартный поток ввода-вывода (т.е. каждый FILE объект) имеет связанный дескриптор файла.

Может ли в программе несколько FILE объектов использовать один и тот же дескриптор файла?

Если да, это делается путем многократного вызова fdopen() с одним и тем же заданным дескриптором файла, каждый из которых возвращает указатель на другой объект FILE?

Если я flcose() на указателе на данный объект FILE, будет ли файловый дескриптор объекта FILE все еще существует и подключится к файлу, если есть другой объект FILE, совместно использующий тот же дескриптор файла

Спасибо.

1 Ответ

0 голосов
/ 30 августа 2018

Да, но это очень плохая идея, поскольку fclose закрывает связанный fd, и поэтому вы можете только fclose один из них без него, что приведет к close в дескрипторе файла, который больше не принадлежит FILE, и, возможно, был переназначен для другого использования. В принципе это происходит даже при завершении процесса, если вы не используете _exit / _Exit или ненормальное завершение.

С этим связан вопрос, можете ли вы использовать разные файловые дескрипторы (каждый из которых создается dup для одного и того же базового открытого описания файла с более чем одним файлом. Для этого ответ также да, и в то время как это может быть плохой идеей, есть правила, которые POSIX определяет, которые делают его безопасным, если вы будете следовать им:

2.5.1 Взаимодействие файловых дескрипторов и стандартных потоков ввода / вывода

...