Rocksolid Light

Welcome to novaBBS (click a section below)

mail  files  register  newsreader  groups  login

Message-ID:  

Information is the inverse of entropy.


devel / comp.unix.programmer / Re: Memory mapping: MAP_PRIVATE and msync()

SubjectAuthor
o Re: Memory mapping: MAP_PRIVATE and msync()pehache

1
Re: Memory mapping: MAP_PRIVATE and msync()

<zg5bFPBPOWrwfU5oe0Ftvee3OqQ@jntp>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=11681&group=comp.unix.programmer#11681

  copy link   Newsgroups: comp.lang.c comp.unix.programmer
Followup: comp.unix.programmer
Path: i2pn2.org!i2pn.org!news.niel.me!pasdenom.info!from-devjntp
Message-ID: <zg5bFPBPOWrwfU5oe0Ftvee3OqQ@jntp>
JNTP-Route: news2.nemoweb.net
JNTP-DataType: Article
Subject: Re: Memory mapping: MAP_PRIVATE and msync()
References: <osGzrqwQ8DBTJ8mCFoPEiv6Pn0M@jntp> <qmtiixDX3flrgimP-RUFSW_hf7o@jntp>
Newsgroups: comp.lang.c,comp.unix.programmer
Followup-To: comp.unix.programmer
JNTP-HashClient: DhiH4rCtsa2DqAZvwt6pm0akAyw
JNTP-ThreadID: Xt4PvXwVS7RUVBYIv4ru98146Os
JNTP-ReferenceUserID: 44@news2.nemoweb.net
JNTP-Uri: http://news2.nemoweb.net/?DataID=zg5bFPBPOWrwfU5oe0Ftvee3OqQ@jntp
User-Agent: Nemo/0.999a
JNTP-OriginServer: news2.nemoweb.net
Date: Sun, 07 Apr 24 19:04:27 +0000
Organization: Nemoweb
JNTP-Browser: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:109.0) Gecko/20100101 Firefox/115.0
Injection-Info: news2.nemoweb.net; posting-host="516ee13c1e79fa65aedf115a32aee346f9289ca9"; logging-data="2024-04-07T19:04:27Z/8809090"; posting-account="44@news2.nemoweb.net"; mail-complaints-to="julien.arlandis@gmail.com"
JNTP-ProtocolVersion: 0.21.1
JNTP-Server: PhpNemoServer/0.94.5
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
X-JNTP-JsonNewsGateway: 0.96
From: pehach...@gmail.com (pehache)
 by: pehache - Sun, 7 Apr 2024 19:04 UTC

As advised, I'm copying this post here

Le 07/04/2024 à 17:18, pehache a écrit :
> Le 07/04/2024 à 15:34, pehache a écrit :
>> Hello,
>>
>> When memory mapping a file with the MAP_PRIVATE flag, the modifications (writes)
>> only exist in memory and are not written back to the file.
>>
>> According to the man pages, calling msync (3) on a such a mapping does NOT
>> writes the changes back:
>>
>> "When the msync() function is called on MAP_PRIVATE mappings, any modified data
>> shall not be written to the underlying object and shall not cause such data to be
>> made visible to other processes"
>> https://linux.die.net/man/3/msync
>>
>> So: is there a way to write the changes back to the file?
>>
>> An obvious application is:
>> - mapping the file with MAP_PRIVATE
>> - make some modifications in memory only (fast) while keeping the original
>> version on disk (safe)
>> - at some point (when the user decides, and once the consistency of the changes
>> have been verified) writing the modifications to the disk
>>
>> I'm pretty sure it exists some way or another, but I don't know how.
>
> At the moment what I'm doing is something like:
>
> ========================================
> fd = open("aaa",O_RDWR);
> p = mmap ( NULL
> , n
> , PROT_READ | PROT_WRITE
> , MAP_PRIVATE | MAP_NORESERVE
> , fd
> , 0 );
>
> // writing to p; the changes exist only in memory
>
> void* p2 = mmap( NULL
> , n
> , PROT_READ | PROT_WRITE
> , MAP_SHARED | MAP_NORESERVE
> , fd
> , 0 );
>
> memcpy(p2,p,n); // copying everything from p to p2
> msync(p2,n);
>
> // unmap/remap p so it's ready for new changes
> munmap(p,n);
> p = mmap ( NULL
> , n
> , PROT_READ | PROT_WRITE
> , MAP_PRIVATE | MAP_NORESERVE
> , fd
> , 0 );
>
> ========================================
>
> This works, but:
>
> - the whole content is copied, not only the changed content
> - is this code legal? Is there any potential conflict between the 2 mapping,
> with an undefined behavior?

1
server_pubkey.txt

rocksolid light 0.9.8
clearnet tor