Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по дисциплине ЛииСРВ.doc
Скачиваний:
4
Добавлен:
01.07.2025
Размер:
271 Кб
Скачать
☆

Системный вызов сrеаt

Системный вызов сrеаt (создать файл) имеет следующий формат:

сreat(name,mode)

сhar *name;

int mode;

Функция сгеаt создает новый (или подготавливает к повторной записи уже существующий) файл с именем name. Если файл еще не существует, значение параметра mode используется для формирования режимов доступа создаваемого файла, при этом учитывается значение маски режимов процесса. Значение параметра mode составляется по правилам, приведенным в описание системного вызова chmod. Если указанный файл существует, то его владелец и режим доступа остаются прежними, а файл усекается до нулевой длины. Кроме того, файл открывается для записи и возвращается его дескриптор.

При неудачном завершении, операции сгеаt возвращается значение -1, в остальных случаях возвращается дескриптор открытого файла (целое положительное число).

После неудачного завершения системного вызова сгеаt переменная еrrnо может принимать следующие значения:

[ЕNOTDIR] - указанное имя содержит компоненту, которая не является справочником;

[ЕNOENТ] - задано слишком длинное или пустое имя файла, или указанный файл не существует или какой-либо из справочников, входящих в имя файла, не доступен для просмотра;

[ЕРЕКМ] - указанное имя содержит символ, отсутствующий в коде АSСП;

[ELООР] - число косвенных ссылок в указанном имени превышает максимально допустимое значение;

[ЕROFS] - попытка создания файла в файловой системе, закрытой на запись;

[ЕТХТВSУ] - попытка сократить длину файла, содержащего загрузочный модуль реентерабельной программы (разделяемый текстовый сегмент), которая в настоящей момент выполняется;

[ЕАССЕS] - режим доступа указанного файла не соответствует запросу;

[ЕFAULТ] - адреса аргументов системного вызова выходят за границы памяти, доступной данному процессу;

[ЕISDIR] - указанное имя файла является именем справочника;

[ЕМFILЕ] - переполнилась таблица открытых файлов процесса;

[ЕNXIO] - указано имя специального файла, для которого нет соответствующего устройства.

Параметр mode задается произвольно, в нем не обязательно должно быть разрешение на запись. Эта возможность используется программами, которые работают с временными файлами с фиксированными именами. Создание производится с режимом, запрещающим запись. Затем, если другая программа пытается выполнить вызов сгеаt, возвращается ошибка и программе становится известно, что в данный момент это имя использовать нельзя. Все действия, перечисленные для вызова сгеаtе, можно выполнить с помощью системного вызова ореn. Вызов сгеаtе оставлен для совместимости с ранними версиями ОС Unix.

Системный вызов read

Системный вызов геаd (чтение файла) имеет следующий формат:

read (fd, buf, nbytes)

char *buf;

int fd, nbytes;

Системный вызов read обеспечивает считывание nbytes данных в массив buf из файла с дескриптором fd. Информация читается из файла по текущему указателю позиции чтения/записи. После завершения пересылки данных значение указателя увеличивается на число считанных байт. Для некоторых файлов значение указателя позиции чтения/записи не имеет смысла (например, для терминала), тем не менее, данные передаются. При успешном завершении вызова, возвращается число считанных байт, в случае ошибки - значение -1, при достижении конца файла в процессе чтения - число 0.

При возникновении ошибки чтения, переменная еrrnо может принимать следующие значения:

[ЕВАDF] - указанный дескриптор не является дескриптором файла, открытого для чтения;

[ЕFAULТ] - адрес параметра системного вызова не входит в адресное пространство процесса;

[ЕINTR] - чтение с медленного устройства прервано до передачи данных.