| Концепция низкоуровневого ввода-вывода |
|
Рассмотрим теперь особенности низкоуровневого ввода-вывода в Linux, сравнивая его с библиотечным вводом-выводом языка С. В ядре Linux в качестве абстракций файлов используются файловые дескрипторы. В отличие от указателей типа file, дескрипторы представляют собой просто целые числа (int). Ядро создает для каждого процесса индивидуальную таблицу файловых дескрипторов, в которой хранится информация об открытых файлах. Итак, абстракция файла в рамках концепции низкоуровневого ввода-вывода представляет собой целое число, являющееся номером записи в таблице дескрипторов текущего процесса. После открытия файла в таблице дескрипторов создается новая запись с уникальным номером. Чтобы избежать "узурпации" всех системных ресурсов одним процессом, ядро ограничивает размер таблицы файловых дескрипторов определенным значением. В оболочках bash, ksh и zsh присутствует внутренняя команда ulimit, с помощью которой можно узнать, сколько файлов может открыть один процесс в вашей системе: $ ulimit -n В оболочках,С Shell (csh, tcsh) для этих целей предназначена команда limit: $ limit descriptors Механизмы открытия и закрытия файлов представлены в ядре следующими системными вызовами: int open (const char * FNAME, int OFLAGS, mode_t MODE); Чтение и запись файлов осуществляются следующими механизмами: ssize_t read (int FD, void * BUFFER, size_t SIZE); Наконец, при помощи следующего системного вызова осуществляется произвольный доступ к данным в файле: off_t Iseek (int FD, off_t OFFSET, int WHENCE); Представленные функции являются системными вызовами. Они отличаются от обычных функций тем, что реализованы в ядре. Иными словами, ядро является для них подобием библиотеки.
Related Articles
Set as favorite
Bookmark
Email This
Hits: 185 Комментарии (0)RSS feed CommentsНаписать комментарий |