1 Вспомните, что системные вызовы определяются индивидуально для каждой архитектуры.
Например, хотя в І386 есть системный вызов creatO, в Alpha он отсутствует. Конечно
же, вы можете использовать creatO в любой архитектуре, но это может быть библиотечная
функция, а не функция, имеющая собственный системный вызов.
Чтение файла при помощи системного вызова readQ 51
Такое дублирование - это наследие прошлого, когда у системного вызова
орепО было только два аргумента. Сегодня системный вызов creatO существует
только для обеспечения совместимости. В новых архитектурах вызов creatO
может реализовываться, как определено в glibc.
Возвращаемые значения и коды ошибок
И орепО, и creatO в случае успешного завершения возвращают дескриптор
файла. В случае ошибки оба вызова возвращают -1 и устанавливают для переменной
errno подходящее значение ошибки (переменная errno рассматривается
в главе 1; там же перечисляются возможные значения ошибок). Ошибка открытия
файла обрабатывается довольно просто, так как обычно до открытия выполняется
лишь несколько шагов, которые необходимо отменить, или вообще
никакие действия не выполняются. Обычный ответ на ошибку - запросить
у пользователя другое имя файла или просто прервать программу.
Чтение файла при помощи системного
вызова read()
Теперь, разобравшись с открытием файла, давайте посмотрим, как же его можно
прочитать. А в следующем разделе поговорим о записи.
Самый простой и распространенный механизм чтения - это системный вызов
readO, определенный в POSIX.1 следующим образом:
finclude
ssize_t read (int fd. void *buf, size_t len);