Архитектура Unix

       

Процессы, ведущие чтение и запись файла



Рисунок 5.8. Процессы, ведущие чтение и запись файла

#include <fcntl.h> /* процесс A */ main() { int fd; char buf[512]; fd = open("/etc/passwd",O_RDONLY); read(fd,buf,sizeof(buf)); /* чтение1 */ read(fd,buf,sizeof(buf)); /* чтение2 */ | } /* процесс B */ main() { int fd,i; char buf[512]; for (i = 0; i < sizeof(buf); i++) buf[i] = 'a'; fd = open("/etc/passwd",O_WRONLY); write(fd,buf,sizeof(buf)); /* запись1 */ write(fd,buf,sizeof(buf)); /* запись2 */ }


Наконец, программа на Рисунке 5.9 показывает, как процесс может открывать файл более одного раза и читать из него, используя разные файловые дескрипторы. Ядро работает со значениями смещений в таблице файлов, ассоциированными с двумя файловыми дескрипторами, независимо, и поэтому массивы buf1 и buf2 будут по завершении выполнения процесса идентичны друг другу при условии, что ни один процесс в это время не производил запись в файл "/etc/passwd".



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