The mmap function creates a new mapped file region, a new private region, or a new shared memory region. Your application must ensure correct synchronization when using mmap in conjunction with any other file access method, such as read and write, and standard input/output. Before calling mmap, the calling application must also ensure that all bytes in the range [off, off+len] are written to the file (using the fsync function, for example). If this requirement is not met, mmap fails with errno set to ENXIO (No such device or address). The addr and len arguments specify the requested starting address and length, in bytes, for the new region. The address is a multiple of the page size returned by sysconf(_SC_PAGE_SIZE). If the len argument is not a multiple of the page size returned by sysconf(_SC_PAGE_SIZE), then the result of any reference to an address between the end of the region and the end of the page containing the end of the region is undefined. The flags argument specifies attributes of the mapped region. Values for flags are constructed by a bitwise-inclusive OR operation on the flags from the following list of symbolic names defined in the <mman.h> header file: MAP_FILE Create a mapped file region. MAP_ANONYMOUS Create an unnamed memory region. MAP_VARIABLE Place region at the computed address. MAP_FIXED Place region at fixed address. MAP_SHARED Share changes. MAP_PRIVATE Changes are private. The MAP_FILE and MAP_ANONYMOUS flags control whether the region you want to map is a mapped file region or an anonymous shared memory region. One of these flags must be selected. If MAP_FILE is set in the flags argument: o A new mapped file region is created, mapping the file associated with the filedes argument. o The off argument specifies the file byte offset where the mapping starts. This offset must be a multiple of the page size returned by sysconf(_SC_PAGE_SIZE). o If the end of the mapped file region is beyond the end of the file, the result of any reference to an address in the mapped file region corresponding to an offset beyond the end of the file is unspecified. If MAP_ANONYMOUS is set in the flags argument: o A new memory region is created and initialized to all zeros. o The filedes argument is ignored. The new region is placed at the requested address if the requested address is not null and it is possible to place the region at this address. When the requested address is null or the region cannot be placed at the requested address, the MAP_ VARIABLE and MAP_FIXED flags control the placement of the region. One of these flags must be selected. If MAP_VARIABLE is set in the flags argument: o If the requested address is null or if it is not possible for the system to place the region at the requested address, the region is placed at an address selected by the system. If MAP_FIXED is set in the flags argument: o If the requested address is not null, the mmap function succeeds even if the requested address is already part of another region. (If the address is within an existing region, the effect on the pages within that region and within the area of the overlap produced by the two regions is the same as if they were unmapped. In other words, whatever is mapped between addr and addr + len is unmapped.) o If the requested address is null and MAP_FIXED is specified, the results are undefined. The MAP_PRIVATE and MAP_SHARED flags control the visibility of modifications to the mapped file or shared memory region. One of these flags must be selected. If MAP_SHARED is set in the flags argument: o If the region is a mapped region, modifications to the region are visible to other processes that mapped the same region using MAP_SHARED. o If the region is a mapped file region, modifications to the region are written to the file. (Note that the modifications are not immediately written to the file because of buffer cache delay; that is, the write to the file does not occur until there is a need to reuse the buffer cache. If the modifications must be written to the file immediately, use the msync function to ensure that this is done.) If MAP_PRIVATE is set in the flags argument: o Modifications to the mapped region by the calling process are not visible to other processes that mapped the same region using either MAP_PRIVATE or MAP_SHARED. o Modifications to the mapped region by the calling process are not written to the file. It is unspecified whether modifications by processes that mapped the region using MAP_SHARED are visible to other processes that mapped the same region using MAP_PRIVATE. The prot argument specifies access permissions for the mapped region. Specify one of the following: PROT_NONE No access PROT_READ Read-only PROT_WRITE Read/Write access After the successful completion of the mmap function, you can close the filedes argument without effect on the mapped region or on the contents of the mapped file. Each mapped region creates a file reference, similar to an open file descriptor, that prevents the file data from being deallocated. NOTE The following rules apply to OpenVMS specific file references: o Because of the additional file reference, if filedes is not opened for file sharing, mmap reopens it with file sharing enabled. o The additional file reference that remains for mapped regions implies that a later open, fopen, or create call to the file that is mapped must specify file sharing. Modifications made to the file using the write function are visible to mapped regions, and modifications to a mapped region are visible with the read function. NOTE Beginning with OpenVMS Version 7.2, while processing a MAP_ SHARED request, the mmap function constructs the flags argument of the SYS$CRMPSC service as a bitwise inclusive OR of those bits it sets by itself to fulfill the MAP_ SHARED request and those bits specified by the caller in the optional argument. By default, for MAP_SHARED the mmap function creates a temporary group global section. The optional mmap argument provides the caller with direct access to the features of the SYS$CRMPSC system service. Using the optional argument, the caller can create, for example, a system global section (SEC$M_SYSGBL bit) or permanent global section (SEC$M_PERM bit). For example, to create a system permanent global section, the caller can specify (SEC$M_SYSGBL | SEC$M_PERM) in the optional argument. The mmap function does not check or set any privileges. It is the responsibility of the caller to set appropriate privileges, such as SYSGBL privilege for SEC$M_SYSGBL, and PRMGBL for SEC$M_PERM, before calling mmap with the optional argument. See also read, write, open, fopen, creat, and sysconf.