Во-первых, имейте в виду, что указатель файла (и связанная с ним распределенная структура) основан на вызовах open () read () write () нижнего уровня. Связанный файловый дескриптор (полученный с помощью fileno (file_pointer) - наименее интересная вещь, но кое-что, с чем вы, возможно, захотите просмотреть свою область.
Если вы собираетесь объявить указатель файла глобальным в модуле, обычно очень хорошая идея сохранить его статичным (содержится в этом модуле / объектном файле). Иногда это немного проще, чем хранить его в структуре, которая передается от функции к функции, если вам нужно что-то написать в спешке.
Например, (плохо)
#include <stdio.h>
#include ...
#define MY_LOG_FILE "file.txt"
FILE *logfile
Лучше сделать как:
#include <stdio.h>
#define MY_LOG_FILE "file.txt"
static FILE *logfile;
int main(void)
{
ЕСЛИ вам нужно несколько модулей, чтобы иметь доступ к этому указателю, и в этом случае вам лучше поместить его в структуру, которую можно передавать.
Если это необходимо только в одном модуле, рассмотрите его объявление в main () и разрешение другим функциям принимать указатель файла в качестве аргумента. Таким образом, если ваши функции внутри модуля не имеют столько аргументов, что другой будет невыносимым ... обычно (обычно) нет причин объявлять файловый указатель глобально.
Некоторые библиотеки журналов делают это, что мне безразлично ... особенно при работе с реентерабельными функциями. Монолитное пространство имен Nevermind C:)