Hi again, everyone, today i have been reading manual section about mmap(), and some things are not completely clear to me, so, unless pebcak, i thought you might like to know about them : mmap description does not say what value of parameter length should be : it gives impression that it can be anything that is not larger than multiple of pagesize that is next higher than size of file ; is this correct ? mmap() description does not mention what happens if writing beyond end of file, though i seem to remember reading somewhere that it causes a segfault ? mmap() description does not mention what happens if write to address that is beyond end of filecontent but inside mapped size ; will it segfault ? if a file is mmapped PROT_SHARED, and another process makes file smaller, will my process segfault when writing beyond new end of file ? is it possible to guard against this by locking file ? munmap description gives impression that if you do munmap it is not necessary to use msync, but does not explicitly say so. is this indeed so ? munmap description says "If LENGTH is not an even number of pages, it will be rounded up." is this correct or should it say 'integer number of pages' ? munmap description says "This function is only available on a few systems.", but does not mention whether this includes GNU. also, _POSIX_MAPPED_FILES is mentioned near description of ftruncate, but there is no mention of whether this is defined on GNU. whole mmap section does not contain a link to description of enlarging mmapped files, that is present in libc doc near description of ftruncate. Where sysconf(_SC_PAGESIZE) is shown in description of mmap(), i think it would be nice if it were mentioned that it is declared in unistd.h . Thanks for reading, and have a nice day :-) Siward
" mmap description does not say what value of parameter length should be : it gives impression that it can be anything that is not larger than multiple of pagesize that is next higher than size of file ; is this correct ?" POSIX states that it can be anything and also states the returned segment shuld adressable for range [pa,pa+len). It is an implementation details if underlaying granularity would be in page sizes. " mmap() description does not mention what happens if writing beyond end of file, though i seem to remember reading somewhere that it causes a segfault ?" man mmap: SIGBUS Attempted access to a portion of the buffer that does not correspond to the file (for example, beyond the end of the file, including the case where another process has truncated the file). " mmap() description does not mention what happens if write to address that is beyond end of filecontent but inside mapped size ; will it segfault ?" Same as before. " if a file is mmapped PROT_SHARED, and another process makes file smaller, will my process segfault when writing beyond new end of file ? is it possible to guard against this by locking file ?" man mmap: "MAP_SHARED Share this mapping. Updates to the mapping are visible to other processes that map this file, and are carried through to the underlying file. (To precisely control when updates are carried through to the underlying file requires the use of msync(2).)" "munmap description gives impression that if you do munmap it is not necessary to use msync, but does not explicitly say so. is this indeed so ?" Yes and manual now states when you should call msync. As for BZ#6887 I will close this bug.