🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.os.linux.programowanie
Article #72704

Re: Mapowanie pliku fizycznego do pamięci

#72704
From: Borneq
Date: Sun, 17 Aug 2014 06:41
29 lines
2585 bytes
W dniu 2014-08-16 o 22:03, Adam Osuchowski pisze:
> Chyba nie bardzo rozumiem jaki masz problem i o co chodzi z tym dużym
> buforem. Mógłbyś to opisać jaśniej?

Właśnie robię komponent do podglądu wielkich plików, które nie będą 
ładowane w całości do pamięci. Na przykład pliki do kilkugigowe dumpy w 
postaci XML. Robię to z użyciem biblioteki FLTK więc przenośnie 
Linux<>Windows
Pierwsze podejście było strumeniowe z użyciem plików i seek.
Gdy poruszam suwakiem, wybieram pozycję w pliku np. 50% pliku, 100% 
czyli koniec. Gdy mam jakąś pozycję, w obsłudze PAINT muszę cofnąć się 
do początku linii, czasem też o kilka, nawet 40 linii gdy wyświetlam 
koniec pliku.
Przeważnie do wyświetlania 40 linii po 100 znaków wystarcza bufor 4 kilo 
do którego ładuję, jednak co gdy linie będą dłuższe? Drugi raz ładować 
mam ze strumienia do bufora i jeszcze raz? Co gdy na granicy części 
ładowanych będzie windowsowy znak podziału linii 13,10?
Chyba że od razu będę używał bufora gdzie zmieści się 40 najdłuższych 
linii, ale mogą być bardzo długie (np. plik może być binarny)

> mmap() mapuje obszar pliku (w szczególności cały plik) w pamięci pod
> zadanym przez użytkownika lub ustalonym automatycznie przez system adresem.

A jak go uzyć? Jako parametr ma uchwyt otwarty przez open()?
http://man7.org/linux/man-pages/man2/mmap.2.html
void *mmap(void *addr, size_t length, int prot, int flags,           int 
fd, off_t offset);
addr może być NULL?, lengh to 32 bitowa wartość, prot to PROT_READ?
offset to 64 bitowy początek mapowania w pliku?
Technical Details
Message-ID: <lspiqk$qoq$1@node2.news.atman.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!.POSTED!not-for-mail
References: <lsoagf$2mv$1@node1.news.atman.pl> <20140816200303.6b8b4567@polsl.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!.POSTED!not-for-mail
From: Borneq <borneq@antyspam.hidden.pl>
Newsgroups: pl.comp.os.linux.programowanie
Subject: Re: Mapowanie pliku fizycznego do pamięci
Date: Sun, 17 Aug 2014 08:41:14 +0200
Organization: ATMAN - ATM S.A.
Lines: 29
Message-ID: <lspiqk$qoq$1@node2.news.atman.pl>
References: <lsoagf$2mv$1@node1.news.atman.pl> <20140816200303.6b8b4567@polsl.pl>
NNTP-Posting-Host: 91.239.205.62
Mime-Version: 1.0
X-Trace: node2.news.atman.pl 1408257684 27418 91.239.205.62 (17 Aug 2014 06:41:24 GMT)
X-Complaints-To: usenet@atman.pl
NNTP-Posting-Date: Sun, 17 Aug 2014 06:41:24 +0000 (UTC)
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:31.0) Gecko/20100101 Thunderbird/31.0
In-Reply-To: <20140816200303.6b8b4567@polsl.pl>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit