Skip to content

Home Программирование Концепция низкоуровневого ввода-вывода
Концепция низкоуровневого ввода-вывода

Рассмотрим теперь особенности низкоуровневого ввода-вывода в Linux, сравнивая его с библиотечным вводом-выводом языка С.

В ядре Linux в качестве абстракций файлов используются файловые дескрипторы. В отличие от указателей типа file, дескрипторы представляют собой просто целые числа (int). Ядро создает для каждого процесса индивидуальную таблицу файловых дескрипторов, в которой хранится информация об открытых файлах. Итак, абстракция файла в рамках концепции низкоуровневого ввода-вывода представляет собой целое число, являющееся номером записи в таблице дескрипторов текущего процесса.

После открытия файла в таблице дескрипторов создается новая запись с уникальным номером. Чтобы избежать "узурпации" всех системных ресурсов одним процессом, ядро ограничивает размер таблицы файловых дескрипторов определенным значением. В оболочках bash, ksh и zsh присутствует внутренняя команда ulimit, с помощью которой можно узнать, сколько файлов может открыть один процесс в вашей системе:

$ ulimit -n
1024

В оболочках,С Shell (csh, tcsh) для этих целей предназначена команда limit:

$  limit descriptors
1024

Механизмы открытия и закрытия файлов представлены в ядре следующими системными вызовами:

int open (const char * FNAME, int OFLAGS, mode_t
 MODE); 
int open (const char * FNAME, int OFLAGS);
int creat (const char * FNAME, mode_t MODE),-int close (int FD);

Чтение и запись файлов осуществляются следующими механизмами:

ssize_t read (int FD, void * BUFFER, size_t SIZE); 
ssize_t write (int FD, const void * BUFFER, size_t SIZE);
ssize_t readv (int FD, const struct iovec * VECTOR," int SIZE) ;
ssize_t writev (int FD, const struct iovec * VECTOR, int SIZE);

Наконец, при помощи следующего системного вызова осуществляется произвольный доступ к данным в файле:

off_t Iseek (int FD, off_t OFFSET, int WHENCE);

Представленные функции являются системными вызовами. Они отличаются от обычных функций тем, что реализованы в ядре. Иными словами, ядро является для них подобием библиотеки.

Комментарии (0)

RSS feed Comments

Написать комментарий

smaller | bigger

busy
 

Регистрация




Top