Студопедия  
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Краткая теория. Совокупность операций, при помощи которых программа читает и записывает файлы, называется вводом-выводом (input/output)

Читайте также:
  1. БИЛЕТ№46. Краткая история развития органического мира.
  2. В – 1. Краткая история финансов и финансовой науки.
  3. Виды излучения и их краткая характеристика.
  4. Вопрос 31. Нормативы качества окружающей среды и их краткая характеристика.
  5. ВОПРОС 4. Краткая история возникновения теории и практики игрового обучения
  6. Выбор дезинфектанта. Краткая характеристика наиболее часто используемых дезинфицирующих средств
  7. Жизненный цикл вновь создаваемой продукции, краткая характеристика этапов.
  8. Знания. Задача, проблема, теория.
  9. История цифры – краткая только пока
  10. Классификация и краткая характеристика различных типов транзисторов

Совокупность операций, при помощи которых программа читает и записывает файлы, называется вводом-выводом (input/output). Если программа читает и записывает файлы посредством прямого обращения к ядру операционной системы, то такой ввод-вывод называется низкоуровневым.

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

Любую модель файлового ввода-вывода можно условно поделить на следующие составляющие:

1. абстракция файла;

2. механизмы открытия и закрытия файлов;

3. механизмы чтения и записи файлов;

4. механизмы произвольного доступа к данным в файле.

Применяя эти понятия к вводу-выводу стандартной библиотеки языка С, мы имеем возможность изучать низкоуровневый ввод-вывод в сравнении с аналогичными механизмами высокого уровня.

Абстракция файла в стандартной библиотеке языка С реализуется через тип данных file. Для этого создается указатель, который в дальнейшем будет участвовать в файловых операциях:

FILE * myfile;

Особого рассмотрения требуют следующие глобальные экземпляры:

extern FILE * stdin;
extern FILE * stdout;
extern FILE * stderr;

Эта "троица" представляет собой стандартный ввод (stdin), стандартный вывод (stdout) и стандартный поток ошибок (stderr). Ввод-вывод в Linux построен на одной аксиоме, которая гласит, что любая операция чтения или записи данных сводится к файловому вводу-выводу. Таким образом, любое "нечто", способное принимать или отправлять данные (клавиатура, экран, аппаратные устройства, сетевые соединения и т. п.) можно представить в виде файла.

Стандартный ввод, стандартный вывод и стандартный поток ошибок — это виртуальные "порталы", через которые система взаимодействует с пользователем. Как правило, стандартный ввод связан с драйвером клавиатуры, а стандартный вывод и стандартный поток ошибок ассоциируются с дисплеем компьютера.

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

FILE * fopen (const char * FLOCATION, const char * OPENJMODE);
FILE * freopen (const char * FLOCATION, const char * OPEN_MODE,FILE * FP);
FILE * fClose (FILE * FP);

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

int fgetc (FILE * FP);
int fputc (int byte, FILE * FP);
char * fgets (char * STR, int SIZE, FILE * FP);
int fputs (const char * STR, FILE * FP);
int fscanf (FILE * FP, const char * FMT,...);
int fprintf (FILE * FP, const char * FMT,...);
int vfscanf (FILE * FP, const char * FMT, va_list ap);
int vfprintf (FILE * FP, const char * FMT, va_list ap);

Файловый ввод-вывод предполагает, что чтение и запись данных осуществляются последовательно. Для этого к абстракции файла привязывается понятие текущей позиции ввода-вывода. Текущая позиция устанавливается в начало файла в момент его открытия. Операции чтения/записи смещают эту позицию вперед на количество прочитанных или записанных байтов. Для принудительного изменения текущей позиции используются механизмы произвольного доступа (random access). В стандартной библиотеке языка С произвольный доступ к данным осуществляется при помощи следующих механизмов:

· #define SEEK_SET 0

· «define SEEK_CUR 1

· «define SEEK_END 2

· typedef struct {...} fpos_t;

· int fseek (FILE * FP, long int OFFSET, int WHENCE);.

· int fgetpos (FILE * FP, fpos_t * POSITION);

· int fsetpos (FILE * FP, fpos_t * POSITION!;

· long int ftell (FILE * FP);

· void rewind (FILE * FP);

Рассмотрим пример программы, которая читает из файла "хвост" заданного размера и выводит его на экран. Первый аргумент программы— имя файла, второй аргумент— размер "хвоста". Все операции ввода-вывода осуществляются средствами стандартной библиотеки языка С.




Дата добавления: 2014-12-15; просмотров: 32 | Поможем написать вашу работу | Нарушение авторских прав




lektsii.net - Лекции.Нет - 2014-2024 год. (0.006 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав