MS-DOS для программиста

Программа SETPOS


Для демонстрации использования функций позиционирования приведем простую программу SETPOS (листинг 3.5), которая для заданного файла и позиции внутри файла отображает содержимое одного байта. Дополнительно программа определяет размер файла и текущую позицию после чтения байта.

Листинг 3.5. Файл setpos\setpos.cpp

#include <io.h> #include <stdio.h> #include <fcntl.h>

int main(void) { int handle; long position, length; char buffer[2], fname[80];

// Запрашиваем имя файла, с которым будем работать printf("Введите имя файла: "); gets(fname);

// Открываем файл handle = open (fname, O_BINARY | O_RDONLY );

// Если такого файла нет, выводим сообщение об ошибке // и завершаем работу программы if(handle == -1) { printf("\nНет такого файла!"); return(-1); }

// Определяем и выводим на экран // размер файла в байтах length = filelength (handle);

printf("\nДлина файла %s составляет %ld байт\n", fname, length);

// Запрашиваем позицию для чтения и отображения байта do { printf("Введите позицию: "); scanf ("%ld", &position); } while(position > length);

// Устанавливаем заданную позицию lseek (handle, position, SEEK_SET );

// Читаем один байт в буфер, начиная с установленной // позиции if(read (handle, buffer, 1) == -1) { // Для вывода сообщения об ошибке используем // функцию perror(), которая добавляет к сообщению, // заданному в параметре, расшифрованное // системное сообщение об ошибке. // Код ошибки функция perror() берет // из переменной errno perror("Ошибка при чтении"); return(-1); }

// Выводим считанный байт на экран printf( "Смещение: %ld; байт: %02.2x ('%c')\n", position, (unsigned char)*buffer, *buffer);

// Определяем текущую позицию и выводим ее // на экран position = tell (handle); printf("\nТекущая позиция в файле: %ld\n", position);

// Закрываем файл close (handle); return 0; }



Содержание раздела