Вам нужно fclose() оба файла после freopen()?

Я пишу код, который берет один файл и сохраняет его в другом с другим именем, однако я не уверен, нужно ли мне закрывать оба файла или нет?

FILE *logfile = fopen("log.txt", "a+");
while(1) {
    char filename[500];
    char logline[512]; 
    char channel[512];

    //Do stuff

    sprintf(filename, "%s.log.txt", channel);
    freopen(filename, "a+", logfile);
    log_to_file(logline, logfile);
}

Возможный дубликат: stackoverflow.com/questions/16122732/…

EUS 29.05.2019 10:22

@EUS Я просмотрел это, но я не использую здесь стандартный вывод или стандартный ввод, это другой файл. (Извините, если это одно и то же, я просто не понимаю)

Daniel 29.05.2019 10:23

Когда программа завершится, оба файла будут автоматически закрыты, так что это не обязательно, но рекомендуется.

EUS 29.05.2019 10:26

Вы можете открыть несколько файлов одновременно, просто убедитесь, что вы закрыли их в какой-то момент (если какая-то другая программа попытается получить доступ к файлам, которые вы читаете / записываете, могут возникнуть проблемы). Если вы на 100% уверены, что никто другой не использует эти файлы, делайте что хотите.

Mete Han Kahraman 29.05.2019 10:27
freopen закрывает исходный файл и связывает указанный FILE указатель с новым файлом. Это означает, что в коде одновременно открыт только один файл, и, следовательно, нужно закрыть только один файл. И да, рекомендуется закрыть файл, когда вы закончите с ним работать.
user3386109 29.05.2019 10:50

@ user3386109 Отлично! Это именно то, что я не мог подтвердить - я не был уверен, нужно ли закрыть старый указатель или нет. Спасибо!

Daniel 29.05.2019 10:52
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
6
367
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Из справочная страница

The freopen() function opens the file whose name is the string pointed to by path and associates the stream pointed to by stream with it. The original stream (if it exists) is closed. [...]

Таким образом, вам не нужно явно закрывать предыдущий поток, после использования просто закройте последний поток.

Другие вопросы по теме