Модель файлового ввода-вывода Unix

Одной из отличительных черт модели ввода-вывода в системах UNIX является понятие универсальности ввода-вывода. Это означает, что одни и те же системные вызовы (open(), read(), write(), close() и т. д.) используются для выполнения ввода-вывода во всех типах файлов, включая устройства. (Ядро преобразует запросы приложений на ввод/вывод в соответствующие операции файловой системы или драйверов устройств, выполняющие ввод/вывод в отношении целевого файла или устройства.) Из этого следует, что про­грамма, использующая эти системные вызовы, будет работать с любым типом файлов.

По сути, ядро выдает один тип файла: последовательный поток байтов, к которому, в случае файлов на дисках, дисков и ленточных накопителей, можно получить произ­вольный доступ с помощью системного вызова lseek().

Многие приложения и библиотеки интерпретируют символ новой строки, или символ конца строки (имеющий десятичный ASCII-код 10) как завершающий одну строку текста и начинающий другую строку. В системах UNIX отсутствует символ конца файла, и конец файла определяется при чтении, не возвращающем данные.

 

Файловый дескриптор

Системные вызовы ввода-вывода ссылаются на открытый файл с использованием фай­лового дескриптора, представляющего собой неотрицательное (обычно небольшое) целое число. Файловый дескриптор обычно возвращается из выдачи системного вызова open(), который получает в качестве аргумента путевое имя, а оно, в свою очередь, указывает на файл, в отношении которого будут выполняться операции ввода-вывода.

При запуске оболочкой процесс наследует, как правило, три дескриптора открытых файлов:

  • дескриптор 0 является стандартным вводом — файлом, из которого процесс получает свой ввод;
  • дескриптор 1 является стандартным выводом — файлом, в который процесс записы­вает свой вывод;
  • дескриптор 2, являющийся стандартной ошибкой, — файлом, в который процесс за­писывает сообщения об ошибках и уведомления об исключительных и нештатных условиях.

В интерактивной оболочке или программе эти три дескриптора подключены, как правило, к терминалу. В библиотеке stdio они соответствуют файловым потокам stdin, stdout и stderr.

 

Библиотека stdio

Для выполнения файлового ввода-вывода программы обычно используют функции ввода-вывода, содержащиеся в стандартной библиотеке языка С. Этот набор функций, известный как библиотека stdio, включает функции fopen(), fclose(), scanf(), printf(), fgets(), fputs() и t. д. Функции stdio наслаиваются поверх системных вызовов ввода- вывода (open(), close(), read(), write() и т. д.).

 

Вас заинтересует / Intresting for you:

Краткая история UNIX и языка С
Краткая история UNIX и языка С 1158 просмотров Андрей Волков Tue, 08 Jan 2019, 16:23:27
Потоки в Linux / Unix
Потоки в Linux / Unix 381 просмотров Fortan Tue, 05 Feb 2019, 17:09:20
Приложения  реального масштаба...
Приложения реального масштаба... 551 просмотров Fortan Fri, 22 Feb 2019, 06:01:08
Сигналы в Linux
Сигналы в Linux 536 просмотров Fortan Tue, 05 Feb 2019, 16:18:38

Войдите чтобы комментировать