Cтраница 2
Открываемый поток полностью буферизуется в том и только в том случае, если он не относится к интерактивному устройству. Индикаторы конца файла и ошибки в открываемом потоке очищаются. Функция fopen возвращает указатель на объект, управляющий этим потоком. Если попытка открыть файл закончилась неудачей, fopen возвращает нулевой указатель. [16]
Функция fsetpos устанавливает индикатор позиции файла для потока, указываемого stream, в соответствии со значением объекта, указываемого pos, которое должно быть значением, полученным от более раннего вызова функции fgetpos для данного потока. Успешный вызов функции fsetpos очищает индикатор конца файла для потока и устраняет все последствия вызовов для него функции ungetc. После вызова fsetpos следующей операцией на обновляемом потоке может быть как ввод, так и вывод. В случае успеха функция fsetpos возвращает ноль; при отказе функция fsetpos возвращает ненулевое значение и передает определяемое реализацией положительное значение в еггпо. [17]
Функция fsetpos устанавливает значение индикатора текущей позиции файла в потоке, на который указывает stream, в соответствии со значением объекта, на который ссылается параметр pos и которое должно быть получено в результате предшествующего вызова функции fgetpos для того же потока. Успешный вызов функции fsetpos очищает индикатор конца файла для потока и отменяет результаты вызова функции ungetc для того же потока. [18]
Функция feof проверяет индикатор конца файла для потока, указанного stream. Функция feof возвращает ненулевое значение тогда и только тогда, когда индикатор конца файла для stream установлен. [19]
Чтобы прочесть файл, DOS находит номер начального кластера в каталоге и затем просматривает FAT в поисках элемента начального кластера. Если весь файл помещен в одном кластере, элемент FAT содержит индикатор конца файла. В противном случае элемент FAT указывает номер следующего кластера, содержащего часть файла. DOS просматривает соответствующие элементы FAT, пока не встретит индикатор конца файла. Система хранения DOS позволяет сохранять файлы в смежных кластерах или фрагментами по всему диску. Каждый фрагмент имеет длину в один кластер, FAT содержит указатель, с помощью которого DOS может собрать все части. [20]
![]() |
Структура раздела FAT. [21] |
Когда системе нужен какой-то файл, она находит его стартовый кластер по имени файла в каталоге их размещения и затем просматривает FAT в поисках элемента списка, соответствующего начальному кластеру. Если весь файл помещен в одном кластере, то элемент FAT содержит индикатор конца файла. Если файл занимает несколько кластеров, элемент FAT указывает номер следующего кластера, в котором должно находиться продолжение файла, либо признак его окончания. В сущности, FAT содержит цепочки ссылок, следуя по которым можно найти размещение каждого файла на диске. [22]
Функция feof проверяет состояние индикатора конца файла для потока, на который ссылается stream. Функция feof возвращает ненулевое значение в том и только в том случае, если индикатор конца файла для этого потока показывает конец файла. [23]
Функция возвращает ненулевое значение ( true), если индикатор конца файла установлен, в противном случае возвращается нуль. В данной программе цикл while, включающий в себя вызов feof, будет продолжать выполняться, пока не будет установлен индикатор конца файла. [24]
Существует несколько способов переадресации ввода / вывода из командной строки UNIX. Рассмотрим исполняемый файл sum, который вводит по одному целые числа и сохраняет значение суммы введенных величин до тех пор, пока не будет установлен индикатор конца файла, после чего распечатывает результат. Обычно пользователь вводит числа с клавиатуры и вводит комбинацию конца файла, чтобы показать, что ввод данных окончен. При переадресации ввода данные, которые необходимо ввести, можно взять из файла. [25]
![]() |
Применение strtoul ( часть 2 из 2.| Символьные и строковые функции стандартной библиотеки ввода / вывода Хороший стиль программирования. [26] |
Программа, приведенная на рис. 8.13, использует функции gets и putchar для чтения строки текста со стандартного входного устройства ( клавиатуры) и рекурсивно выводит символы строки в обратном порядке. Функция gets читает символы со стандартного входного устройства и передает их своему аргументу - массиву типа char - до тех пор, пока не встретит символ новой строки или индикатор конца файла. Символ NULL ( 0) добавляется в массив после окончания считывания. Функция putchar печатает свой аргумент - символ. Для печати строки текста в обратном порядке программа рис. 8.13 вызывает рекурсивную функцию reverse. Если первый символ массива, полученный функцией reverse, является нулевым символом 0, то следует возврат из функции. [27]
Устанавливает номер канала / х для устройства с названием S. Канал работает в режиме / 2; / з обозначает выделение буферов ввода; / 4 - выделение буферов вывода; / 5 есть максимальное число символов, читаемых при одном запросе на ввод; Vt - описатель разделительного индикатора; У2 - индикатор конца файла. Файл с именем S связывается с каналом / для чтения. OPEN) для канала /, отсутствует такой файл. [28]
Функция freopen сначала пытается закрыть файл, который связан с заданным потоком. Если закрытие файла произошло с ошибкой, то она игнорируется. Индикаторы конца файла и ошибки открываемого потока очищаются. В случае неудачного открытия файла freopen возвращает нулевой указатель. [29]
Есть и другой способ обработки конца файла, при котором можно обойтись без этого лишнего ЕСЛИ. Он заключается в чтении одной записи еще при осуществлении начальных действий. Тогда основной цикл состоит из обработки прочитанной записи, за которой следует программа чтения следующей записи. Цикл по-прежнему управляется индикатором конца файла. Поскольку предложение ЧИТАТЬ: - л ершает цикл, а конструкция В КОНЦЕ включает индикатор, он будет проверяться до обработки очередной записи в предложении ВЫПОЛНИТЬ... [30]