Cтраница 3
Второй пример, относящийся к обработке файлов, связан с редактированием последовательного файла. Предположим, что существует главный файл, содержащий много записей, и файл изменений, содержащий относительно немного записей. Программа последовательного редактирования читает информацию из старого главного файла с именем старыйфайл и из файла изменений под именем измфайл, создавая при этом измененный главный файл с именем новыйфайл. Каждый шаг выполнения программы связан либо с копированием записи из старого файла в новый, либо с модификацией записи старого файла в соответствии с содержимым файла изменений. Существуют три типа модификаций: замена, исключение и вставка. Замена изменяет значение главной записи, при исключении запись удаляется из файла, а вставка связана с созданием новой записи. Информация, требуемая для замен и вставок, содержится в файле изменений. Замена записей - по существу избыточная операция, поскольку она может быть выполнена с помощью исключения и вставки, но мы все же оставили эту операцию. [31]
Первой записи из файла изменений не соответствует ни одна запись в файле сотрудников. В этом случае происходит добавление новой записи, соответствующей новому сотруднику. ID-номера следующих двух записей файла изменений имеются в обоих файлах. В этом случае могут быть либо удаления, либо изменения записей файла сотрудников. Последняя запись в файле изменений с ID-номером, равным 0000395995, порождает еще одну новую запись в файле сотрудников. [32]
Записи файла инвентаризации доступны в произвольном, или непоследовательном, порядке. Предварительно, до всех обновлений, файл инвентаризации создается с помощью занесения записей, состоящих из всех пробелов, с использованием относительной организации и последовательного доступа. Эти записи служат в качестве фиктивных записей для хранения будущих значений, связанных с некоторым инвентаризуемым товаром. При последующих прогонах программы файл открывается как входной-выходной, так что для данного фа ила могут выполняться оба оператора READ и REWRITE. Последнее данное указывает на тот файл изменений, который будет использоваться для обновления этой конкретной записи инвентаризации. В общем для этих данных в записи инвентаризации требуется 165 позиций. [33]
В примере программы, приводимой в данном разделе, файл изменений из предыдущего раздела считывается и используется в качестве исходной информации для изменения файла. Расплачиваясь за ограничения, свойственные последовательным файлам и описанные в гл. Такой подход приводит к копированию всего файла сотрудников. Даже в том случае, когда требуется изменить только одну запись, файл сотрудников должен быть целиком считан и скопирован на новый файл. По этой причине целесообразно накапливать достаточное количество записей в файле изменений, чтобы работа вычислительной машины была оправдана. [34]
В этом разделе мы рассмотрим некоторые системные вызовы, относящиеся скорее к каталогам и файловой системе в целом, нежели просто к определенному файлу, как в предыдущем разделе. Первые два вызова, mkdi г и rmdi г, соответственно создают и удаляют пустые каталоги. Он разрешает одному файлу появляться под двумя или более именами, часто в разных каталогах. Этот вызов обычно используется, когда несколько программистов, работающих в одной команде, должны совместно использовать один общий файл. Тогда этот файл может появиться в каталоге у каждого из программистов, возможно, под другим именем. При разделении файла изменения, производимые одним программистом, немедленно становятся видимыми для остальных - все происходит в одном файле. А при создании копии файла последующие изменения не влияют на другие копии этого файла. [35]
В этом разделе мы рассмотрим некоторые системные вызовы, относящиеся скорее к каталогам и файловой системе в целом, нежели просто к определенному файлу, как в предыдущем разделе. Первые два вызова, mkdir и rmdir, соответственно создают и удаляют пустые каталоги. Он разрешает одному файлу появляться под двумя или более именами, часто в разных каталогах. Этот вызов обычно используется, когда несколько программистов, работающих в одной команде, должны совместно использовать один общий файл. Тогда этот файл может появиться в каталоге у каждого из программистов, возможно, под другим именем. При разделении файла изменения, производимые одним программистом, немедленно становятся видимыми для остальных - все происходит в одном файле. А при создании копии файла последующие изменения не влияют на другие копии этого файла. [36]
Второй пример, относящийся к обработке файлов, связан с редактированием последовательного файла. Предположим, что существует главный файл, содержащий много записей, и файл изменений, содержащий относительно немного записей. Программа последовательного редактирования читает информацию из старого главного файла с именем старыйфайл и из файла изменений под именем измфайл, создавая при этом измененный главный файл с именем новыйфайл. Каждый шаг выполнения программы связан либо с копированием записи из старого файла в новый, либо с модификацией записи старого файла в соответствии с содержимым файла изменений. Существуют три типа модификаций: замена, исключение и вставка. Замена изменяет значение главной записи, при исключении запись удаляется из файла, а вставка связана с созданием новой записи. Информация, требуемая для замен и вставок, содержится в файле изменений. Замена записей - по существу избыточная операция, поскольку она может быть выполнена с помощью исключения и вставки, но мы все же оставили эту операцию. [37]