написать (системный вызов)


Запись — одна из самых основных процедур, предоставляемых ядром Unix-подобной операционной системы . Он записывает данные из буфера, объявленного пользователем, на заданное устройство, например в файл. Это основной способ вывода данных из программы напрямую с помощью системного вызова. Пункт назначения идентифицируется числовым кодом . Записываемые данные , например фрагмент текста, определяются указателем и размером, заданным в байтах.

Интерфейс вызова записи [1] [2] [3] стандартизирован спецификацией POSIX. Данные записываются в файл с помощью вызова функции записи. Прототип функции:

В приведенном выше синтаксисе ssize_tэто typedef. Это подписанный тип данных, определенный в stddef.h. Обратите внимание, что write()не возвращает беззнаковое значение; он возвращает -1, если возникает ошибка, поэтому он должен возвращать значение со знаком.
Функция записи возвращает количество байтов, успешно записанных в файл, которое иногда может быть меньше указанного nbytes . Он возвращает -1, если встречается исключительное условие, см. раздел об ошибках ниже.

Ниже перечислены некоторые ошибки [4] [5] , которые могут возникнуть при записи в файл. Ошибки — это макросы, перечисленные в errno.h .

Системный вызов записи не является обычной функцией, несмотря на близкое сходство. Например, в Linux с архитектурой x86 системный вызов использует инструкцию INT 80H, чтобы передать управление ядру. [6] Системный вызов write и его аналог read , являясь низкоуровневыми функциями, способны понимать только байты . Запись не может использоваться для записи записей, таких как классы . Таким образом, функции ввода-вывода более высокого уровня (такие как printf) являются обязательными. Часто высокоуровневый интерфейс предпочтительнее, чем загроможденный низкоуровневый интерфейс. Эти функции внутри себя вызывают другие функции, а те, в свою очередь, могут выполнять вызовы для записи, создавая многоуровневую сборку функций. [7] [8]

С помощью этой сборки функции более высокого уровня могут собирать байты данных, а затем записывать необходимые данные в файл.


Функции ввода/вывода высокого уровня, вызывающие запись