Cтраница 3
У системного вызова 1 seek три параметра: первый - это дескриптор файла, второй - новая позиция в файле, а третий сообщает, указывается ли эта позиция относительно начала файла, конца файла или относительно текущей позиции. Значение, возвращаемое системным вызовом Iseek, представляет собой абсолютную позицию в файле после того, как указатель был перемещен. Забавно, что системный вызов Iseek ( seek означает поиск, термин, также используемый для перемещения блока головок диска) никогда не вызывает перемещения блока головок диска, так как все, что он делает, - это обновление текущей позиции в файле, представляющей собой просто число в памяти. [31]
![]() |
Связь между таблицей дескрипторов файлов, таблицей открытых файлов и таблицей i-узлов. [32] |
Когда оболочка создает процесс р, его пользовательская структура ( включая таблицу дескрипторов файлов) представляет собой точную копию такой же структуры оболочки, поэтому обе они содержат указатели на одну и ту же таблицу открытых файлов. Когда теперь оболочка создает процесс р2, новый дочерний процесс автоматически наследует позицию в файле. При этом ни сам новый процесс, ни оболочка даже не должны знать текущее значение этой позиции. [33]
Данная функция выводит выражение на экран или в открытый файл, заданный аргументом дескриптор файла, без пробелов и переходов на новую строку и возвращает выражение. Выражение может быть любым, а не только строковой константой. [34]
![]() |
Связь между таблицей дескрипторов файлов, таблицей открытых файлов и таблицей i-узлов. [35] |
Когда оболочка создает процесс р 1, его пользовательская структура ( включая таблицу дескрипторов файлов) представляет собой точную копию такой же структуры оболочки, поэтому обе они содержат указатели на одну и ту же таблицу открытых файлов. Когда теперь оболочка создает процесср2, новый дочерний процесс автоматически наследует позицию в файле. При этом ни сам новый процесс, ни оболочка даже не должны знать текущее значение этой позиции. [36]
Функции ввода / вывода работают не с именами файлов, а с так называемыми дескрипторами файлов, определяющими не только собственно файл, но и режим доступа и различные другие системные параметры. Открыть файл - значит подготовить дескриптор файла к использованию его функциями ввода / вывода Автолиспа. [37]
Эта функция записывает 1 символ на экран или в открытый файл, заданный аргументом дескриптор файла. Здесь число - код ASCII символа и является возвращаемым функцией значением. [38]
При этом система не гарантирует, что будет передано заданное количество байтов: например, если дескриптор файла ссылается на магнитную ленту, то длина принятой записи может оказаться меньше, так как при вводе может быть обнаружена запись меньшей длины, завершающая операцию. Тем не менее в любом случае процессу передается действительное число введенных байтов. Если длина запис равна нулю, это означает, что был достигнут конец файла. [39]
Комиссия по защите дескрипторов файлов выдвинула протест против системы UNIX, потому что когда эта система возвращает дескриптор файла, она всегда возвращает самый маленький номер, который в данный момент не используется. [40]
Для выполнения многих системных вызовов требуется получение ресурсов, например элементов таблицы процессов, элементов таблицы i-узлов или дескрипторов файлов. Прежде чем захватывать ресурсы, полезно проверить, можно ли выполнить этот системный вызов. Это означает, что всю проверку следует поместить в начало процедуры, выполняющей системный вызов. [41]
Ускорение доступа к данным на диске достигается путем дефрагментации ( устранения фрагментации) файлов, а также размещения дескрипторов файлов таким образом, чтобы обеспечить более быстрый доступ к наиболее часто используемым файлам. [42]
Чтобы прочитать файл, программа, работающая в системе MS-DOS, должна сначала сделать системный вызов open, чтобы получить дескриптор файла. [43]
![]() |
Некоторые системные вызовы для работы с файлами. [44] |
Теперь продолжим изучение основных файловых системных вызовов, перечисленных в табл. 10.10. ( В случае ошибки возвращаемое значениеs равно - l fd - дескриптор файла, position - смещение в файле. Чтобы прочитать данные из существующего файла или записать данные в существующий файл, файл сначала нужно открыть с помощью системного вызова open. Этому системному вызову следует указать имя файла, а также режим, в котором он должен быть открыт: для чтения, для записи или и для того и для другого. [45]