[Overview][Constants][Types][Procedures and functions][Index] Reference for unit 'BaseUnix' (#rtl)

Fpmmap

Create memory map of a file

Declaration

Source position: bunxh.inc line 107

function Fpmmap(

start: pointer;

len: size_t ;

prot: cint ;

flags: cint ;

fd: cint ;

offst: off_t

):pointer;

Description

FpMMap maps or unmaps files or devices into memory. The different arguments determine what and how the file is mapped:

adr
Address where to mmap the device. This address is a hint, and may not be followed.
len
Size (in bytes) of area to be mapped.
prot

Protection of mapped memory. This is a OR-ed combination of the following constants:

PROT_EXEC
The memory can be executed.
PROT_READ
The memory can be read.
PROT_WRITE
The memory can be written.
PROT_NONE
The memory can not be accessed.
flags

Contains some options for the mmap call. It is an OR-ed combination of the following constants:

MAP_FIXED
Do not map at another address than the given address. If the address cannot be used, MMap will fail.
MAP_SHARED
Share this map with other processes that map this object.
MAP_PRIVATE
Create a private map with copy-on-write semantics.
MAP_ANONYMOUS
fd does not have to be a file descriptor.

One of the options MAP_SHARED and MAP_PRIVATE must be present, but not both at the same time.

fd
File descriptor from which to map.
off
Offset to be used in file descriptor fd.

The function returns a pointer to the mapped memory, or a -1 in case of en error.

Errors

On error, -1 is returned and extended error information is returned by the FpGetErrno function.

Sys_EBADF
fd is not a valid file descriptor and MAP_ANONYMOUS was not specified.
Sys_EACCES
MAP_PRIVATE was specified, but fd is not open for reading. Or MAP_SHARED was asked and PROT_WRITE is set, fd is not open for writing
Sys_EINVAL
One of the record fields Start, length or offset is invalid.
Sys_ETXTBUSY
MAP_DENYWRITE was set but the object specified by fd is open for writing.
Sys_EAGAIN
fd is locked, or too much memory is locked.
Sys_ENOMEM
Not enough memory for this operation.

See also

FpMUnMap

Unmap previously mapped memory block

Example

Program Example66;
{ Program to demonstrate the MMap function. }
Uses BaseUnix,Unix;
Var S : String;
 fd : cint;
 Len : longint;
// args : tmmapargs;
 P : PChar;
begin
 s:='This is the string';
 Len:=Length(S);
 fd:=fpOpen('testfile.txt',O_wrOnly or o_creat);
 If fd=-1 then
 Halt(1);
 If fpWrite(fd,S[1],Len)=-1 then
 Halt(2);
 fpClose(fd);
 fd:=fpOpen('testfile.txt',O_rdOnly);
 if fd=-1 then
 Halt(3);
 P:=Pchar(fpmmap(nil,len+1 ,PROT_READ or PROT_WRITE,MAP_PRIVATE,fd,0));
 If longint(P)=-1 then
 Halt(4);
 Writeln('Read in memory :',P);
 fpclose(fd);
 if fpMUnMap(P,Len)<>0 Then
 Halt(fpgeterrno);
end.

Documentation generated on: May 14 2021

AltStyle によって変換されたページ (->オリジナル) /