URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 4185
[ Назад ]

Исходное сообщение
"Чт-е/ред-ие файла произвольного размера"

Отправлено Dmitry , 17-Апр-05 12:42 
Доброго времени суток!
Подскажите пожалуйста, Мне нужно читать/редак-ть файл любого размера, мне подсказали что для этого оптимальнымбудет использование mmap()(хранение файла в памяти) так ли это?
Если да нет ли у кого примеров как работает эта функция, а то у нее много всяких параметров :)

Содержание

Сообщения в этом обсуждении
"Чт-е/ред-ие файла произвольного размера"
Отправлено Асен Тотин , 17-Апр-05 14:07 
Привет,

Пример из 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 0x100

int 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,


"Чт-е/ред-ие файла произвольного размера"
Отправлено Maxim Kuznetsov , 20-Апр-05 16:34 
Скажите, Вы пример вводили методом cut&paste ?
(то есть ЭТО точная копия ?)
если да, то могу только посочуствовать людям которые пытаются учиться по таким примерам ;-[

"Чт-е/ред-ие файла произвольного размера"
Отправлено Асен Тотин , 20-Апр-05 16:48 
Привет,

Книги всегда нужно читать от начала до конца прежде чем судить о них. Пример был взят из своего контекта лишь для того, чтоб навести коллегу на мысль посмотреть всю книжку... поэтому и бил процитирован источник, даже глава.

WWell,


"Чт-е/ред-ие файла произвольного размера"
Отправлено MaximKuznetsov , 21-Апр-05 00:23 
>Привет,
>
>Книги всегда нужно читать от начала до конца прежде чем судить о
>них. Пример был взят из своего контекта лишь для того, чтоб
>навести коллегу на мысль посмотреть всю книжку... поэтому и бил процитирован
>источник, даже глава.
>
>WWell,
  не критикуя книгу, замечу лишь, что приведенный пример просто изобилует ошибками..что допустимо, если Вы просто пропустили лишний текст (оставили только наводящий на тему)..
а так - редкий случай, когда ошибки практически на каждой строке..
совсем не тянет на "Advanced"

"Чт-е/ред-ие файла произвольного размера"
Отправлено proglammer , 20-Апр-05 21:21 
lseek        19
%ebx    - Дескриптор файла в котором изменять смещение
%ecx    - Смещение в байтах
%edx    - 0-установить смещение от начала файла, 1-от текущего смещения, 2-от конца файла.

В %EAX возврашается новое смещение от начала файла в байтах, или "-1" в случае ошибки.


"Чт-е/ред-ие файла произвольного размера"
Отправлено Dmitry , 28-Апр-05 11:30 
Ок отображать файл отображает :)

Резонные вопросы:
1. Как читать из отображенной памяти?
2. Как писать в нужное место?
3. Как вообще позицировать считывать и пасать туда, а потом сохранять все изменения в файле?


"Чт-е/ред-ие файла произвольного размера"
Отправлено Simps , 28-Апр-05 12:14 
>Ок отображать файл отображает :)
>
>Резонные вопросы:
>1. Как читать из отображенной памяти?
>2. Как писать в нужное место?
>3. Как вообще позицировать считывать и пасать туда, а потом сохранять все
>изменения в файле?

Пасать в файл физически не возможно, при физическом воздействии на винчестер ,последний выйдет из строя =)


"Чт-е/ред-ие файла произвольного размера"
Отправлено VLazarenko , 28-Апр-05 12:22 
>>Ок отображать файл отображает :)
>>
>>Резонные вопросы:
>>1. Как читать из отображенной памяти?
>>2. Как писать в нужное место?
>>3. Как вообще позицировать считывать и пасать туда, а потом сохранять все
>>изменения в файле?
>
>Пасать в файл физически не возможно, при физическом воздействии на винчестер ,последний
>выйдет из строя =)

Пасать... ) ЖЖОШЬ, пиши исчо)


"Чт-е/ред-ие файла произвольного размера"
Отправлено Dmitry , 28-Апр-05 19:00 
Слушай умник тебе череп не жмет?
ха ха ха... пасать в файл не возможно...

"Чт-е/ред-ие файла произвольного размера"
Отправлено Simps , 29-Апр-05 10:05 
>Слушай умник тебе череп не жмет?
>ха ха ха... пасать в файл не возможно...

Да Вы какой то буйный =) Ваши же слова =) Или Вы совсем шуток не понимаете а сразу копытами роете землю? =)
=============================================
Ок отображать файл отображает  :)

Резонные вопросы:
1. Как читать из отображенной памяти?
2. Как писать в нужное место?
3. Как вообще позицировать считывать и пасать туда, а потом сохранять все
                                                                           ^^^^^^
изменения в файле?
==============================================


"Чт-е/ред-ие файла произвольного размера"
Отправлено Simps , 28-Апр-05 12:20 
>Ок отображать файл отображает :)
>
>Резонные вопросы:
>1. Как читать из отображенной памяти?
>2. Как писать в нужное место?
>3. Как вообще позицировать считывать и пасать туда, а потом сохранять все
>изменения в файле?

Пасать в файл физически не возможно. Если нарушить герметизацию винчестера и осуществить сей акт, девайс выйдет из строя =)


"Чт-е/ред-ие файла произвольного размера"
Отправлено Dmitry , 29-Апр-05 11:18 
Шутки я понимаю, если они в меру и к месту...

З.Ы. а придиратся к опечаткам не хорошо :(


"Чт-е/ред-ие файла произвольного размера"
Отправлено Simps , 29-Апр-05 16:07 
>Шутки я понимаю, если они в меру и к месту...
>
>З.Ы. а придиратся к опечаткам не хорошо :(
Сколько людей, столько шуток и мест =)
Прошу прощения если обидел Вас, злого умысла не было


"Чт-е/ред-ие файла произвольного размера"
Отправлено DeadMustdie , 01-Май-05 16:05 
>Пасать в файл физически не возможно. Если нарушить герметизацию
>винчестера и осуществить сей акт, девайс выйдет из строя =)

А на работающей машине возможно ещё и поражение электрическим
током - блок питания не особенно далеко ;-)