Архитектура операционной системы UNIX   ::   Бах Морис Дж.

Страница: 520 из 715

Его старший номер — 7, младший — 21. Процесс, открывающий файлы, получает доступ к устройству через таблицу ключей устройств ввода-вывода блоками и таблицу ключей устройств посимвольного ввода-вывода, соответственно, а младший номер устройства 21 информирует драйвер о том, к какому разделу диска производится обращение, например, дисковод 2, раздел 1. Поскольку младшие номера у файлов совпадают, они ссылаются на один и тот же раздел диска, если предположить, что это одно устройство [31] . Таким образом, процесс, выполняющий программу, открывает один и тот же драйвер дважды (используя различные интерфейсы), позиционирует головку к смещению с адресом 8192 и считывает данные с этого места. Результаты выполнения операций чтения должны быть идентичными при условии, что работает только одна файловая система.

#include "fcntl.h"

main() {

 char buf1[4096], buf2[4096];

 int fd1, fd2, i;

 if (((fd1 = open("/dev/dsk5/", O_RDONLY)) == -1) || ((fd2 = open("/dev/rdsk5", O_RDONLY)) == -1)) {

  printf("ошибка при открытии\n");

  exit();

 }

 lseek(fd1, 8192L, 0);

 lseek(fd2, 8192L, 0);

 if ((read(fd1, buf1, sizeof(buf1)) == -1) || (read(fd2,  buf2, sizeof(buf2)) == -1)) {

  printf("ошибка при чтении\n");

  exit();

 }

 for (i = 0; i ‹ sizeof(buf1); i++) if (buf1[i] != buf2[i]) {

  printf("различие в смещении %d\n", i);

  exit();

 }

 printf("данные совпадают\n");

}

Рисунок 10.8.

|< Пред. 518 519 520 521 522 След. >|

Java книги

Контакты: [email protected]