• Re: Memory mapping: MAP_PRIVATE and msync()

    From Lew Pitcher@21:1/5 to pehache on Sun Apr 7 15:49:38 2024
    On Sun, 07 Apr 2024 13:34:43 +0000, pehache wrote:

    Hello,

    Hi, pehache

    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.
    [snip]
    So: is there a way to write the changes back to the file?
    [snip]

    The comp.unix.programmer newsgroup will be of better help for this sort
    of question (it's not really on-topic for comp.lang.c).

    But, of the top of my head; with my limited understanding of the unix
    mmap() kernel call, the only ways to "write the changes" are to either
    1) mmap(MAP_SHARED) and modify the mapped area, or
    2) write() the mapped area back to the file.

    But, as I said, comp.unix.programmer will be of better help.

    --
    Lew Pitcher
    "In Skills We Trust"

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Lawrence D'Oliveiro@21:1/5 to pehache on Mon Apr 8 01:50:07 2024
    On Sun, 07 Apr 24 15:18:47 +0000, pehache wrote:

    void* p2 = mmap( NULL
    , n
    , PROT_READ | PROT_WRITE
    , MAP_SHARED | MAP_NORESERVE
    , fd
    , 0 );

    Not easy to remember what the arguments mean. Try this:

    void * p2 = mmap
    (
    /*addr =*/ NULL,
    /*length =*/ n,
    /*prot =*/ PROT_READ | PROT_WRITE,
    /*flags =*/ MAP_SHARED | MAP_NORESERVE,
    /*fd =*/ fd,
    /*offset =*/ 0
    );

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Kaz Kylheku@21:1/5 to Lawrence D'Oliveiro on Mon Apr 8 03:06:26 2024
    On 2024-04-08, Lawrence D'Oliveiro <ldo@nz.invalid> wrote:
    On Sun, 07 Apr 24 15:18:47 +0000, pehache wrote:

    void* p2 = mmap( NULL
    , n
    , PROT_READ | PROT_WRITE
    , MAP_SHARED | MAP_NORESERVE
    , fd
    , 0 );

    Not easy to remember what the arguments mean. Try this:

    Nobody is going to follow your grotesque, poorly considered coding
    conventions.


    void * p2 = mmap
    (
    /*addr =*/ NULL,
    ^^^^ ^^^^ a null pointer is some kind of "addr"

    /*length =*/ n,
    /*prot =*/ PROT_READ | PROT_WRITE,
    ^^^^ ^^^^
    | |
    `---------|---- You know this
    `---- from this.

    /*flags =*/ MAP_SHARED | MAP_NORESERVE,
    ^^^^
    Tells you nothing. You know that preprocessor constants
    combined together with | are "flags".

    /*fd =*/ fd,
    ^^ ^^
    identical, tells you nothing.

    /*offset =*/ 0
    );


    --
    TXR Programming Language: http://nongnu.org/txr
    Cygnal: Cygwin Native Application Library: http://kylheku.com/cygnal
    Mastodon: @Kazinator@mstdn.ca

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From bart@21:1/5 to Lawrence D'Oliveiro on Mon Apr 8 12:14:30 2024
    On 08/04/2024 02:50, Lawrence D'Oliveiro wrote:
    On Sun, 07 Apr 24 15:18:47 +0000, pehache wrote:

    void* p2 = mmap( NULL
    , n
    , PROT_READ | PROT_WRITE
    , MAP_SHARED | MAP_NORESERVE
    , fd
    , 0 );

    Not easy to remember what the arguments mean. Try this:

    void * p2 = mmap
    (
    /*addr =*/ NULL,
    /*length =*/ n,
    /*prot =*/ PROT_READ | PROT_WRITE,
    /*flags =*/ MAP_SHARED | MAP_NORESERVE,
    /*fd =*/ fd,
    /*offset =*/ 0
    );


    That's great but, how did you manage to figure out the meanings and
    order of the parameters in order to be able to write those comments?

    If you have 1000s of calls to such functions, will you have those
    comments plastered everwhere?

    In a language with proper named/keyword arguments, you don't need to
    remember the order. You don't need to supply all the arguments (eg. addr
    and offset in your example can have defaults, possibly those sets of
    flags too).

    If you get an argument name wrong, it will tell you. I suspect that if
    you wrote this by mistake:

    /*prot =*/ MAP_SHARED | MAP_NORESERVE,
    /*flags =*/ PROT_READ | PROT_WRITE,

    it would not be detected.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Lawrence D'Oliveiro@21:1/5 to bart on Tue Apr 9 01:52:48 2024
    On Mon, 8 Apr 2024 12:14:30 +0100, bart wrote:

    ... how did you manage to figure out the meanings and
    order of the parameters in order to be able to write those comments?

    I read the docs.

    If you have 1000s of calls to such functions, will you have those
    comments plastered everwhere?

    Yes.

    In a language with proper named/keyword arguments, you don't need to
    remember the order.

    True. I take advantage of that--and defaults for omitted arguments--in
    Python.

    But there are people in this noisegroup who don’t like me mentioning that.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)