Язык программирования C

Скачать в pdf «Язык программирования C»


FILE _iob[OPEN_MAX] =    {    /*    stdin, stdout,    stderr: */


{    0,    (char    *)    0,    (char    *)    0,    _READ, 0 },


{    0,    (char    *)    0,    (char    *)    0,    _WRITE, 1 },


{    0,    (char    *)    0,    (char    *)    0,    _WRITE | _UNBUF,    2 }

};


Инициализация полей flag файловых структур показывает, что stdin будет использоваться для чтения, stdout —для записи, a stderr — для записи без буферизации.


Упражнение 8.2. Перепишите функции fopen и fillbuf с применением битовых полей вместо явных операций над битами. Сравните объем кода и быстродействие.


Упражнение 8.3. Спроектируйте и напишите функции _f lushbuf, f flush и f close. Упражнение 8.4. Следующая стандартная библиотечная функция эквивалентна lseek: int fseek(FILE *fp, long offset, int origin)


Различие состоит в том, что ее аргумент f р — это файловый указатель, а не файловый дескриптор, и возвращаемое ею значение типа int сообщает статус завершения, а не текущую позицию. Напишите функцию fseek. Сделайте так, чтобы она согласовывала свою работу с буферизацией, выполняемой другими библиотечными функциями.

8.6. Пример получения списка файлов в каталоге


Иногда бывает необходимо получить через файловую систему информацию не о содержимом файла, а о самом файле. Примером может служить программа Is из системы Unix для вывода списка файлов в каталоге с сопутствующей информацией о них, такой как размеры, допуски и т.д. Аналогичные функции выполняет команда dir в системе MS-DOS.


Поскольку каталог в Unix представляет собой просто файл, программе Is нужно всего лишь прочитать этот файл и извлечь из него нужные имена. Но для получения другой информации — например, размера файла — необходимо пользоваться системными вызовами. В других системах даже для получения имен файлов в каталоге не обойтись без системного вызова; именно так обстоит дело в MS-DOS. Хотелось бы обеспечить доступ к этой информации сравнительно системно-независимым способом, пусть даже реализация окажется существенно основанной на средствах конкретной системы.

Скачать в pdf «Язык программирования C»