4.4.2.2. Закрытие всех открытых файлов

4.4.2.2. Закрытие всех открытых файлов

Открытые файлы наследуются порожденными процессами от своих родительских процессов. Фактически они являются общими. В частности, общим является положение в файле. Подробности мы оставим для дальнейшего обсуждения в разделе 9.1.1.2 «Разделение дескрипторов файлов».

Поскольку программы могут наследовать другие файлы, иногда вы можете увидеть программы, которые закрывают все свои файлы, чтобы начать с «чистого состояния» В частности, типичен код наподобие этого:

int i;

/* оставить лишь 0, 1, и 2 */

for (i = 3; i < getdtablesize(); i++)

 (void)close(i);

Предположим, что результат getdtablesize() равен 1024. Этот код работает, но он делает (1024-3)*2 = 2042 системных вызова. 1020 из них не нужны, поскольку возвращаемое значение getdtablesize() не изменяется. Вот лучший вариант этого кода:

int i, fds;

for (i = 3, fds = getdtablesize(); i < fds; i++)

 (void)close(i);

Такая оптимизация не ухудшает читаемость кода, но может быть заметна разница, особенно на медленных системах. В общем, стоит поискать случаи, когда в циклах повторно вычисляется один и тот же результат, чтобы посмотреть, нельзя ли вынести вычисление за пределы цикла. Хотя в таких случаях нужно убедиться, что вы (а) сохраняете правильность кода и (б) сохраняете его читаемость!

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг:

4.4.2. Открытие и закрытие файлов

Из книги автора

4.4.2. Открытие и закрытие файлов Новые дескрипторы файлов получают (наряду с другими источниками) в результате системного вызова open(). Этот системный вызов открывает файл для чтения или записи и возвращает новый дескриптор файла для последующих операций с этим файлом. Мы


5.1.5.1. Удаление открытых файлов

Из книги автора

5.1.5.1. Удаление открытых файлов С самых первых дней Unix было возможно удалять открытые файлы. Просто вызовите unlink() с именем файла после успешного вызова open() или creat().На первый взгляд, это кажется странным. Поскольку система освобождает блоки данных, когда счетчик ссылок на


11.2.2. Закрытие файлов

Из книги автора

11.2.2. Закрытие файлов Одной из операций, которые одинаковы для файлов всех типов, является закрытие файла. Ниже показано, как закрыть файл.#include <unistd.h>int close(int fd);Очевидно, что это базовая операция. Однако есть один важный момент, касающийся закрытия файлов, о котором


1996 г.: война всех против всех

Из книги автора

1996 г.: война всех против всех Избрание Билла Клинтона не повернуло вспять волну дерегулирования. Ему пришлось согласиться, что «эпоха большого правительства» закончена — мнение, которое относилось как к режиму вмешательства властей в экономику, так и к концепции


Установка всех файлов справки

Из книги автора

Установка всех файлов справки В зависимости от приложения и от того, как вы его инсталлировали, на вашем жестком диске установлен, а, может быть, и не установлен полный комплект файлов справки VBA. Из-за того, что любая серьезная работа в VBA без файлов справки практически


Закрытие открытых файлов

Из книги автора

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


10.1.1. Открытие и закрытие файлов

Из книги автора

10.1.1. Открытие и закрытие файлов Метод класса File.new, создающий новый объект File, также открывает файл. Первым параметром, естественно, является имя файла.Необязательный второй параметр называется строкой указания режимам он говорит, как нужно открывать файл — для чтения,


Закрытие файлов

Из книги автора

Закрытие файлов Функция close закрывает открытые файлы. Открытые файлы также автоматически закрываются при неаварийном завершении


Закрытие файлов

Из книги автора

Закрытие файлов После того, как вы поработали с файлом, его надо закрыть. Класс CFile имеет для этого специальный метод Close:virtual void Close() throw(CFileException);Метод закрывает файл. Если вы создали объект класса CFile и открыли файл, а затем объект удаляется, то связанный с ним файл


Объенение всех файлов, расположенных в заданной директории

Из книги автора

Объенение всех файлов, расположенных в заданной директории Задача: объединить три файла: 1.txt, 2.txt, 3.txt.1. Сделайте новую директорию (скажем, files) и скопируйте в нее 1.txt, 2.txt, 3.txt;2. Выберите «txt» в «file type»;3. Нажмите «path» и выберите директорию files;4. Нажмите «find» и файлы 1.txt, 2.txt, 3.txt


Инфраструктуры открытых ключей (PKI)

Из книги автора

Инфраструктуры открытых ключей (PKI) PKI, как и простой сервер-депозитарий, имеет базу данных для хранения сертификатов, но, в то же время, предоставляет сервисы и протоколы по управлению открытыми ключами. В них входят возможности выпуска (издания), отзыва (аннулирования) и


День открытых дверей

Из книги автора

День открытых дверей За неделю выставки Computex найти свободное время оказалось непросто. Тем не менее, я пожертвовал целым днем - сотрудники компании MSI предложили познакомиться со своим подразделением R amp;D (Research amp;Development) - центром разработки. Разговоры с инженерами и


Маркирование всех файлов и папок

Из книги автора

Маркирование всех файлов и папок Чтобы отметить все объекты текущего каталога, необходимо в меню Правка выбрать команду Выделить все. При маркировании имен всех файлов и папок не имеет значения, на имени какого файла или папки находится в данный момент маркер. Можно