[<<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;