#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;
}
