if ((fp->flag & (_READ | _WRITE)) == 0)
break; /* found free slot */
if (fp >= _iob + OPEN_MAX) /* no free slots */
return NULL;
if (*mode == 'w')
fd = creat(name, PERMS);
else if (*mode == 'a') {
if ((fd = open(name, 0_WRONLY, 0)) == -1)
fd = creat (name, PERMS);
lseek(fd, 0L, 2);
} else
fd = open (name, 0_RDONLY, 0);
if (fd == -1) /* couldn't access name */
return NULL;
fp->fd = fd;
fp->cnt = 0;
fp->base = NULL;
fp->flag = (*mode = 'r') ? _READ : _WRITE;
return fp;
}
Эта версия FOPEN не управляет всеми стандартными возможностями управления файла.
В частности в ней не распознается тип файла BINARY и некоторые другие возможности. Цель этой программы проиллюстрировать достаточно глубокое использование примитивов файловой системы.
VI.
Переназначение ввода-вывода. Каналы
Средства Ввода и вывода - не часть языка непосредственно.
Программы взаимодействуют с их средой в намного более
сложным пути чем те мы показали прежде. В этой главе мы
опишем стандартную библиотеку, набор функций, которые обеспечивают
ввод и вывод.
Традиционно C использует услуги операционной системы UNIX для
работы со вводом - выводом. Язык C имеет три способа системных вызовов:
- Стандартный ввод - вывод;
- Байтовый ввод - вывод;
- Блочно-ориентированный ввод - вывод.
В этой главе мы описываем эти три способа. Но стандартный Ввод - вывод мы
Пила выше и в этой главе это - повторение(копия) старого материала с
Некоторые новые подробности. Список параметров Переменной длины нов в этой части.
Свойства библиотечных функций определены в торцевых бортах <stdio.h>,
<Io.h>, <ctype.h>.
8. Я. Стандартный ввод - вывод.
Стандартный Ввод - вывод имеет три специальных идентификация, чтобы описать режимы
Из работы:
- Stdin - стандартная входная (клавиатура),
- Stdout - стандартный вывод (экран),
- Stderr - средние квадратические ошибки (также экран, но определять ошибки
В во время выполнения).
Эти три идентификация мы может использовать непосредственно в байтовом и
Блочно-ориентированный Ввод - вывод для совместимости с общей(обычной) файловой системой. Но в них
Вариант это не необходим использовать операцию "открытый файл", потому что стандарт
Судебный архив открыт всегда в во время выполнения из программы.
Простая модель текстового ввода и выхода.
Как мы сказали выше, библиотека осуществляет простую модель
текстового ввода и вывода. Текстовый поток состоит из последовательности строк;
Каждые концы строки снабжаются newline символом. Если система не оперирует
этим путем, то библиотека должна выполнять необходимые преобразования.
Например, библиотека могла бы конвертировать(преобразовывать) перевод каретки и
перевод строки к newline на входе и назад снова на выходе.
Самый простой входной механизм должен читать один символ одновременно
со стандартного входа, обычно клавиатура, с GETCHAR:
Int getchar ( )
Getchar возвращает следующий входной символ, или EOF
когда сталкивается с концом файла. Символическая константа EOF определена в
<Stdio.h>. Значение обычно -1, но испытания должны быть написаны в
виде EOF, чтобы независеть от специфической величины.
Во многих средах, файл может быть заменен на клавиатуру
Использование < соглашение для входного переназначения: если PROG использует программу
GETCHAR, тогда командная строка
Prog <infile>
заставляет PROG читать символы от INFILE вместо этого. Переключение
входа сделано таким способом, что сама PROG безразлична к
замене; в частности файл " < infile " не включена в
определение командной строки в argv. Переключение Входа также невидимо если
Вход исходит из другой программы через механизм канала: в UNIX
командная строка
Otherprog | prog
выполняет эти две программы OTHERPROG и PROG, и стандартный вывод трубопроводов
из otherprog переходит в стандартный вход для PROG.
Функция
Int putchar (int)
используется для вывода: putchar (c) выводит символ "С" на
вывод, который является по умолчанию экраном. Putchar возвращает введенный символ
или EOF, если ошибка происходит. Снова, выход может обычно быть
направленный к поименованному файла: если prog использует putchar,
Prog > outfile
запишет стандартный вывод к outfile вместо этого. Если каналы поддержаны,
Prog | anotherprog
Помещает стандартный вывод prog в стандартный вход anotherprog.
В то время как ((C = getchar ())! = EOF)
Putchar (tolower (c));
Возвращение 0;
}
Функция tolower определена в <ctype.h>; это конвертирует(преобразовывает) верхний
Символ случая к нижней наборной кассе строчных литер, и возвращениям другие нетронутые(равнодушные) символы. Как
Мы упомянули ранее, "функции" подобно getchar и putchar в <stdio.h>
И tolower в <ctype.h> - часто макрокоманды, таким образом избегая верхнего
Из обращения к функции в символ.
Точно также можно записать информацию в уже существующий файл,
если знак ">" заме6ить на знак ">>". Можно вывести в файл сообщение об
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.