Стивен Прата - Язык программирования C. Лекции и упражнения (6-е изд.) 2015
- Название:Язык программирования C. Лекции и упражнения (6-е изд.) 2015
- Автор:
- Жанр:
- Издательство:Вильямс
- Год:0101
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Стивен Прата - Язык программирования C. Лекции и упражнения (6-е изд.) 2015 краткое содержание
Язык программирования C. Лекции и упражнения (6-е изд.) 2015 - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
books > bklist
то все интерактивные запросы будут перенаправлены в bklist. Это не только приведет к помещению в файл bklist нежелательного текста, но и предотвратит отображение вопросов, на которые вы предположительно ответили.
Как и можно было ожидать, язык С предлагает более мощные методы взаимодействия с файлами. Он позволяет открывать файл внутри программы и затем с помощью специальных функций ввода-вывода осуществлять чтение и запись в этот файл. Однако прежде чем переходить к изучению таких методов, давайте кратко рассмог рим саму природу файла.
понятие файла
Файл — это именованный раздел хранилища, обычно расположенный на жестком диске или на получающем все большее распространение в последнее время твердотельном диске. Например, stdio.h можно представлять себе как имя файла, содержащего некоторую полезную информацию. Тем не менее, для операционной системы файл выглядит не так просто. Скажем, крупный файл может храниться в нескольких отдельных фрагментах или содержать дополнительные данные, которые позволяют операционной системе определять вид этого файла. Но за все это отвечает операционная система, а не вы (если только вы сами не занимаетесь разработкой операционной системы). Вас интересует только то, как файлы представляются в программе на С.
В языке С файл рассматривается как непрерывную последовательность байтов, каждый из которых может быть прочитан индивидуально. Это соответствует файловой структуре в среде Unix, откуда С берет свое начало. Поскольку другие среды могут не соответствовать в точности этой модели, в С предлагаются два способа представления файлов: текстовый режим и двоичный режим.
Текстовый режим и двоичный режим
Прежде всего, давайте проведем различие между текстовым и двоичным содержимым, текстовым и двоичным файловыми форматами, а также текстовым и двоичным режимами для файлов.
Содержимое всех файлов хранится в двоичной форме (нули и единицы). Но если в файле двоичные коды символов (к примеру, ASCII или Unicode) используются главным образом для представления текста, почти как в строках С, то такой файл являет
Файловый ввод-вывод 533
ся текстовым, т.е. имеет текстовое содержимое. Если же двоичные значения в файле представляют код на машинном языке, числовые данные (с применением того же внутреннего представления, как, скажем, у значений long или double), кодировку изображения или музыкального произведения, то содержимое будет двоичным.
Для обоих видов содержимого в Unix используется один и тот же файловый формат. Учитывая, что язык С был создан как инструмент для разработки операционной системы Unix, не должно вызывать удивления, что и в С, и в Unix для обозначения разрыва строки внутри текста применяется \n (символ перевода строки). Каталоги Unix поддерживают счетчик размера файла, который программы могут использовать для выяснения, достигнут ли конец файла. Тем не менее, другие системы располагали другими способами поддержки файлов, специально ориентированными на хранение текста. Это значит, что в них для текстовых файлов предусмотрен формат, отличающийся от модели Unix.
Например, в файлах Macintosh до выхода OS X для указания новой строки применялся символ \г (возврат каретки). В файлах из ранних версий MS-DOS для обозначения повой строки использовалась комбинация \г\n, а для признака конца файла — встраиваемый символ , несмотря на то, что действительный файл может быть дополнен нулевыми символами, чтобы сделать общий размер кратным 256. (В среде Windows редактор “Блокнот” по-прежнему создает текстовые файлы в формате MS-DOS, но более новые редакторы могут применять формат, близкий к Unix- подобному.) Другие системы могут делать все строки в текстовом файле одинаковой длины, дополняя их при необходимости нулевыми символами до нужной длины. Или же система может кодировать длину каждой строки в ее начале.
Чтобы привнести некоторую закономерность в обработку текстовых файлов, язык С предоставляет два способа доступа в файл: двоичный режим и текстовый режим. В двоичном режиме программе доступен каждый байт файла. Однако в текстовом режиме то, что видит программа, может отличаться от того, что хранится в файле. В текстовом режиме при чтении файла представление локальной среды для таких символов, как конец строки или конец файла, сопоставляется с их представлением в С.
Аналогично, представление в С отображается на локальное представление вывода. Например, программа С, скомпилированная в старой среде Macintosh, будет преобразовывать \г в \n при чтении файла в текстовом режиме и \n в \г при записи в файл. Программа С текстового режима, скомпилированная на платформе MS-DOS, будет преобразовывать \г\n в \n при чтении из файла и \n в \г\n при записи в файл. Программы текстового режима, написанные для других сред, предпринимают похожие корректировки.
При работе с текстовым файлом вы не ограничены только текстовым представлением. Для того же самого файла можно использовать и двоичное представление. Если вы поступите подобным образом для старого текстового файла MS-DOS, то программа будет видеть в файле символы \г и \n; никакого сопоставления не происходит. (Сказанное иллюстрируется на рис. 13.1.) Если вы хотите написать программу просмотра текста, которая работает, скажем, со старыми форматами Macintosh, MS-DOS и Unix/Linux, то могли бы применять двоичный режим, чтобы программа выясняла фактическое содержимое файла и предпринимала соответствующие действия.
Несмотря на то что в С доступны двоичное и текстовое представления, они могут быть реализованы идентично. Как упоминалось ранее, поскольку в Unix применяется всего одна файловая структура, в реализациях для Unix оба представления одинаковы. То же самое справедливо для Linux.
Глава 13
Уровни ввода-вывода
В дополнение к выбору представления файла в большинстве случаев вы можете выбирать один из двух уровней ввода-вывода (т.е. из двух уровней управления доступом к файлам). Низкоуровневый ввод-вывод предусматривает использование основных служб ввода-вывода, предоставляемых операционной системой. Стандартный высокоуровневый ввод-вывод предполагает применение стандартного пакета библиотечных функций С и определений из заголовочного файла stdio.h. Стандарт С поддерживает только стандартный пакет ввода-вывода, т.к. нет никакой возможности гарантировать, что все операционные системы могут быть представлены одинаковой низкоуровневой моделью ввода-вывода. Отдельные реализации могут также предлагать низкоуровневые библиотеки, но из-за того, что стандарт С устанавливает переносимую модель ввода- вывода, мы сосредоточим все внимание на ней.
Читать дальшеИнтервал:
Закладка: