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

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

h›

main() {

 int fd;

 char buf[1024];

 fd = creat("junk", 0666);

 lseek(fd, 2000L, 2); /* ищется байт сномером 2000 */

 write(fd, "hello", 5);

 close(fd);

 fd = open("junk", O_RDONLY);

 read(fd, buf, 1024); /* читает нули */

 read(fd, buf, 1024); /* считывает нечто, отличное от 0 */

 read(fd, buf, 1024);

}

Рисунок 5.35. Считывание нулей и конца файла

5. Если процесс читает данные из файла последовательно, ядро запоминает значение блока, прочитанного с продвижением, в индексе, хранящемся в памяти. Что произойдет, если несколько процессов будут одновременно вести последовательное считывание данных из одного и того же файла?

#include ‹fcntl.h›

main() {

 int fd;

 char buf[256];

 fd = open("/etc/passwd", O_RDONLY);

 if (read(fd, buf, 1024) ‹ 0)  printf("чтение завершается неудачно\n");

}

Рисунок 5.36. Чтение большой порции данных в маленький буфер

6. Рассмотрим программу, приведенную на Рисунке 5.36. Что произойдет в результате выполнения программы? Обоснуйте ответ. Что произошло бы, если бы объявление массива buf было вставлено между объявлениями двух других массивов размером 1024 элемента каждый? Каким образом ядро устанавливает, что прочитанная порция данных слишком велика для буфера?

*7.

|< Пред. 221 222 223 224 225 След. >|

Java книги

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