[<<Previous Entry] [^^Up^^] [Next Entry>>] [Menu] [About The Guide]
 Доступ к файлу

Эти примеры показывают два способа изменения байтов в начале файла,
выражающих целое значение.
.    Традиционный подход
   Открывается файл.  open(2) возвращает  файловый дескриптор. read(2)
   считывает байты,  представляющие целое  значение и  сохраняет его в
   count.  Значение   увеличивается  на   10.  Затем   новое  значение
   записывается  в  начало  файла,  для  этого  позиция  чтения/записи
   сдвигается на  величину, соответствующую  размеру целого значения в
   байтах, с  тем чтобы  значение могло  быть записано  в то  же самое
   место файла.

.    Подход с отображением файла в память
   Открывается файл.  open(2) возвращает файловый дескриптор. fstat(2)
   возвращает информацию  о состоянии  файла. Весь файл отображается в
   память -  off равен  0,  sbuf.st_size  равняется  размеру  файла  в
   байтах. Система  выбирает адрес  отображения.  Адрес,  возвращаемый
   mmap(2), преобразуется в целое и присваивается pa. Затем содержимое
   файла изменяется прямой записью в память. Первое же целое значение,
   хранящееся в отображенной области памяти, увеличивается на 10.
                            ДОСТУП К ФАЙЛУ
.    традиционный подход

     fd = open("testfile", O_RDWR);
     read(fd, &count, sizeof(count);
     count += 10;
     lseek(fd, -sizeof(count), SEEK_CUR);
     write(fd, &count, sizeof(count));


.    подход с отображением файла в память

     fd = open("testfile", O_RDWR);
     size = lseek(fd, 0, SEEK_END);
     pa = (int *)mmap(0, size,
         PROT_READ|PROT_WRITE,
         MAP_SHARED, fd, 0);
     *pa += 10;