Доброго времени суток!
Подскажите пожалуйста, Мне нужно читать/редак-ть файл любого размера, мне подсказали что для этого оптимальнымбудет использование mmap()(хранение файла в памяти) так ли это?
Если да нет ли у кого примеров как работает эта функция, а то у нее много всяких параметров :)
Привет,Пример из Advanced Linux Programming, глава 5, IPC:
Listing 5.6 (mmap-read.c) Read an Integer from a Memory-Mapped File, and
Double It#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <unistd.h>
#define FILE_LENGTH 0x100int main (int argc, char* const argv[])
{
int fd;
void* file_memory;
int integer;/* Open the file. */
fd = open (argv[1], O_RDWR, S_IRUSR | S_IWUSR);/* Create the memory mapping. */
file_memory = mmap (0, FILE_LENGTH, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
close (fd);/* Read the integer, print it out, and double it. */
scanf (file_memory, “%d”, &integer);
printf (“value: %d\n”, integer);
sprintf ((char*) file_memory, “%d\n”, 2 * integer);/* Release the memory (unnecessary because the program exits). */
munmap (file_memory, FILE_LENGTH);
return 0;
}WWell,
Скажите, Вы пример вводили методом cut&paste ?
(то есть ЭТО точная копия ?)
если да, то могу только посочуствовать людям которые пытаются учиться по таким примерам ;-[
Привет,Книги всегда нужно читать от начала до конца прежде чем судить о них. Пример был взят из своего контекта лишь для того, чтоб навести коллегу на мысль посмотреть всю книжку... поэтому и бил процитирован источник, даже глава.
WWell,
>Привет,
>
>Книги всегда нужно читать от начала до конца прежде чем судить о
>них. Пример был взят из своего контекта лишь для того, чтоб
>навести коллегу на мысль посмотреть всю книжку... поэтому и бил процитирован
>источник, даже глава.
>
>WWell,
не критикуя книгу, замечу лишь, что приведенный пример просто изобилует ошибками..что допустимо, если Вы просто пропустили лишний текст (оставили только наводящий на тему)..
а так - редкий случай, когда ошибки практически на каждой строке..
совсем не тянет на "Advanced"
lseek 19
%ebx - Дескриптор файла в котором изменять смещение
%ecx - Смещение в байтах
%edx - 0-установить смещение от начала файла, 1-от текущего смещения, 2-от конца файла.В %EAX возврашается новое смещение от начала файла в байтах, или "-1" в случае ошибки.
Ок отображать файл отображает :)Резонные вопросы:
1. Как читать из отображенной памяти?
2. Как писать в нужное место?
3. Как вообще позицировать считывать и пасать туда, а потом сохранять все изменения в файле?
>Ок отображать файл отображает :)
>
>Резонные вопросы:
>1. Как читать из отображенной памяти?
>2. Как писать в нужное место?
>3. Как вообще позицировать считывать и пасать туда, а потом сохранять все
>изменения в файле?Пасать в файл физически не возможно, при физическом воздействии на винчестер ,последний выйдет из строя =)
>>Ок отображать файл отображает :)
>>
>>Резонные вопросы:
>>1. Как читать из отображенной памяти?
>>2. Как писать в нужное место?
>>3. Как вообще позицировать считывать и пасать туда, а потом сохранять все
>>изменения в файле?
>
>Пасать в файл физически не возможно, при физическом воздействии на винчестер ,последний
>выйдет из строя =)Пасать... ) ЖЖОШЬ, пиши исчо)
Слушай умник тебе череп не жмет?
ха ха ха... пасать в файл не возможно...
>Слушай умник тебе череп не жмет?
>ха ха ха... пасать в файл не возможно...Да Вы какой то буйный =) Ваши же слова =) Или Вы совсем шуток не понимаете а сразу копытами роете землю? =)
=============================================
Ок отображать файл отображает :)Резонные вопросы:
1. Как читать из отображенной памяти?
2. Как писать в нужное место?
3. Как вообще позицировать считывать и пасать туда, а потом сохранять все
^^^^^^
изменения в файле?
==============================================
>Ок отображать файл отображает :)
>
>Резонные вопросы:
>1. Как читать из отображенной памяти?
>2. Как писать в нужное место?
>3. Как вообще позицировать считывать и пасать туда, а потом сохранять все
>изменения в файле?Пасать в файл физически не возможно. Если нарушить герметизацию винчестера и осуществить сей акт, девайс выйдет из строя =)
Шутки я понимаю, если они в меру и к месту...З.Ы. а придиратся к опечаткам не хорошо :(
>Шутки я понимаю, если они в меру и к месту...
>
>З.Ы. а придиратся к опечаткам не хорошо :(
Сколько людей, столько шуток и мест =)
Прошу прощения если обидел Вас, злого умысла не было
>Пасать в файл физически не возможно. Если нарушить герметизацию
>винчестера и осуществить сей акт, девайс выйдет из строя =)А на работающей машине возможно ещё и поражение электрическим
током - блок питания не особенно далеко ;-)