2015-02-12 2 views
0

Лучше ли использовать fopen() и fclose() в начале и конце каждой функции, использующей этот файл, или лучше передать указатель файла на каждую из этих функций? Или даже установить указатель файла как элемент структуры, к которой относится файл. У меня есть два проекта, и каждый из них использует один метод (потому что я думал о передаче указателя файла после того, как начал первый). Когда я говорю лучше, я имею в виду скорость и/или читаемость. Что лучше?Есть ли лучший способ управлять указателем файла в C?

Спасибо!

+3

Это зависит от того, как вы используете файл, и как часто вам нужно читать/писать и многие другие факторы. –

+1

Это, кажется, довольно широкий, основанный на мнениях вопрос. В * general *, я бы сказал, что лучше открыть файл один раз, сделать все, что вам нужно с ним, а затем закрыть его, как только вы закончите, но без практического, реального контекста для этого вопроса я могу «На самом деле, лучше сказать, что может быть лучше - могут быть ситуации, когда к файлу нужно обращаться нечасто, и в этом случае политика с открытым положением может быть лучше. – GoBusto

ответ

0

Это зависит. Вам, безусловно, следует задокументировать, какая функция fopen(3) -информация FILE и какая функция ожидает fclose(3).

Вы можете поместить FILE* в struct, но у вас должно быть соглашение о том, кто и когда должен читать и/или записывать и закрывать файл.

Помните, что открытые файлы - это некоторые экспансивные ресурсы в процессе (= ваша работающая программа). BTW, это также operating system и file system. И FILE ручки буферных см fflush(3) & setvbuf(3)

На небольших системах, максимальное количество fopen -ED файлов ручек может быть как несколько десятков. На текущем рабочем столе Linux процесс может иметь несколько тысяч открытых file descriptors (которые хранит внутренний FILE с его буферами). В любом случае, это довольно дорогостоящий и пугающий ресурс (в Linux вы можете ограничить его setrlimit(2))

Помните, что диск IO очень медленный w.r.t. ЦПУ.