ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
Управление файлами и директориямиСюда относятся функции, прототипы которых расположены в файлах dir.h, io.h, sys/stat.h, stdio.h, dos.h, time.h. Эти функции позволяют сделать следующеее: · создать и удалить субдиректорий любого директория, в т.ч. корневого, · определить номер текущего активного накопителя и текущий директорий, · выполнить поиск файла или директория, удовлетворяющего определенным критериям, соответствующим атрибутам «только читаемый», «системный», «архивный» и т.д. (возможен поиск совокупности файлов), · выполнить сборку и разборку спецификации пути к файлу, содержащей информацию о накопителе, маршруте и т.д., · изменить форму доступа к файлу – перейти от потоковой к префиксной форме и наоборот, · выполнить удаление, переименование файлов и создать резервные копии, при этом возможна автоматическая генерация уникальных имен независимо от пользователя, · выяснить существование заданного имени файла или директория, переустановить для них параметры или прочитать эти параметры, такие как – размер файла, дата обновления, дата создания, биты прав доступа и пр., · выяснить текущее состояние файла – открыт ли, достигнута ли метка конца файла, переустановить режим доступа к открытому файлу и т.д. Пример В программе выполняется поиск всех файлов и директориев в соответствии с заданным шаблоном, вводимым в качестве 1-го параметра при запуске программы из командной строки. Шаблон может содержать символы - *,? и т.д. void print_element (struct ffblk *); int main (int argc, char **argv) { int new_drive; static struct ffblk my; ………………………. // проверка числа введенных аргументов ……………………….. //проверка правильности указания накопителя if(strchr(argv[1], (int)’:’)!= NULL) { new_drive = toupper((int)argv[1]) – ‘A’; if(setdisk(new_drive) < new_drive) { printf(“\a%s\n”, “Задан несуществующий накопитель!”); exit(2); } } // первая попытка поиска if(findfirst(argv[1], &my, 0xff) == -1) { printf(“\a%s\n”, “Нет файлов или директориев, удовл-х шаблону!”); exit(3); } print_element(&my); // продолжение поиска while(findnext(&my) == 0) print_element(&my); exit(0); } Комментарий к этой программе следующий: · функция strchr() определяет первое вхождение «:» в строку, соответствующую 1-му аргументу, · функция int setdisk(int drive) выполняет установку накопителя, заданного параметром drive, - ‘A’, соответствует 0, ‘B’, соответствует1 и т.д.; в случае неуспеха возвращается -1, иначе общее число накопителей в системе, · функция int findfirst(const char* filename, struct ffblk *ffblk, int attrib) ищет 1-й файл, заданный именем filename, удовлетворяющий атрибутам attrib; в случае успеха возвращает 0 и заполняет структурную переменную ffblk, иначе возвращает -1, (struct ffblk содержится в dir.h. выписать 1-е 10 строк) · функция findnext() продолжает поиск и возвращает -1 в случае неуспеха или возвращает 0 в случае успеха, · функция print_element() пользовательская – выполняет распечатку найденных параметров (ее реализация должна быть выполнена в качестве упражнения). Самостоятельно – выяснить что означает значение 0xff? Для этого следует рассмотреть содержимое файла dos.h и в нем константы, начинающиеся с “/FA_”, и проанализировать спецификацию функции findfirst()! Вопросы для самоконтроля
Вопросы для самостоятельного изучения · В stdlib.h или errno.h просмотреть возможные коды в errno. Определить максимальный код! · Выписать 1-е 10 строк struct ffblk, описание которого содержится в dir.h! · Выяснить что означает значение 0xff (см. представленный выше пример)!
Лекция 15. Блочный ввод/вывод и произвольный доступ к данным При выполнении поблочного ввода-вывода выполняется перенос байтов данных между ВЗУ и программой без каких-либо форматных преобразований. Не нашли, что искали? Воспользуйтесь поиском:
|