Compaq C
Compaq C Run-Time Library Reference Manual for
OpenVMS Systems
If MAP_PRIVATE is set in the flags argument:
- 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.
- 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:
- Because of the additional file reference, if filedes is
not opened for file sharing,
mmap
reopens it with file sharing enabled.
- 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. So 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
in this section.
Return Values
x
|
The address where the mapping is placed.
|
MAP_FAILED
|
Indicates an error;
errno
is set to one of the following values:
- EACCES -- The file referred to by
filedes is not open for read access, or the file is not open
for write access and PROT_WRITE was set for a MAP_SHARED mapping
operation.
- EBADF -- The
filedes argument is not a valid file descriptor.
- EINVAL --The
flags or
prot argument is invalid, or the
addr argument or
off argument is not a multiple of the page size returned by
sysconf(_SC_PAGE_SIZE)
. Or MAP_ANONYMOUS was specified in
flags and
filedes is not --1.
- ENODEV -- The file descriptor
filedes refers to an object that cannot be mapped, such as a
terminal.
- ENOMEM -- There is not enough address space to map
len bytes.
- ENXIO -- The addresses specified by the range [
off, off + len] are invalid for
filedes.
- EFAULT -- The
addr argument is an invalid address.
|
modf
Decomposes a floating-point number.
Format
#include <math.h>
double modf (double x, double *iptr);
float modff (float x, float *iptr); (ALPHA ONLY)
long double modfl (long double x, long double *iptr);
(ALPHA ONLY)
Arguments
x
An object of type
double
,
float
, or
long double
.
iptr
A pointer to an object of type
double
,
float
, or
long double
, to match the type of x.
Description
The
modf
functions decompose their first argument x into a positive
fractional part f and an integer part i, each of
which has the same sign as x.
The functions return f and assign i to the object
pointed to by the second argument (iptr).
Return Values
x
|
The fractional part of the argument
x.
|
NaN
|
x is NaN;
errno
is set to EDOM and *
iptr is set to NaN.
|
0
|
Underflow occurred; errno is set to ERANGE.
|
[w]move
Change the current cursor position on the specified window to the
coordinates (y,x). The
move
function acts on the
stdscr
window.
Format
#include <curses.h>
int move (int y, int x);
int wmove (WINDOW *win, int y, int x);
Arguments
win
A pointer to the window.
y
A window coordinate.
x
A window coordinate.
Description
For more information, see the
scrollok
function in this section.
Return Values
OK
|
Indicates success.
|
ERR
|
Indicates that the function makes the screen scroll illegally.
|
mprotect
Modifies access protections of memory mapping.
Format
#include <mman.h>
int mprotect (void *addr, size_t len, int
prot);
Arguments
addr
The address of the region that you want to modify.
len
The length in bytes of the region that you want to modify.
prot
Access permission, as defined in the
<mman.h>
header file. Specify either PROT_NONE, PROT_READ, or PROT_WRITE.
Description
This function modifies the access protection of a mapped file or shared
memory region.
The addr and len arguments specify the address and
length in bytes of the region that you want to modify. The len
argument must be a multiple of the page size as returned by
sysconf(_SC_PAGE_SIZE)
. If len is not a multiple of the page size as returned by
sysconf(_SC_PAGE_SIZE)
, the length of the region is rounded up to the next multiple of the
page size.
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
|
The
mprotect
function does not modify the access permission of any region that lies
outside of the specified region, except that the effect on addresses
between the end of the region, and the end of the page containing the
end of the region, is unspecified.
If the
mprotect
function fails under a condition other than that specified by EINVAL,
the access protection of some of the pages in the range [addr, addr
+ len] can change. Suppose the error occurs on some page at an
addr2;
mprotect
can modify protections of all whole pages in the range [addr,
addr2].
See also
sysconf
in this section.
Return Values
0
|
Indicates success.
|
--1
|
Indicates an error;
errno
is set to one of the following values:
- EACCESS -- The
prot argument specifies a protection that conflicts with the
access permission set for the underlying file.
- EINVAL -- The
prot argument is invalid, or the
addr argument is not a multiple of the page size as returned by
sysconf(_SC_PAGE_SIZE)
.
- EFAULT -- The range [
addr, addr + len] includes an invalid address.
|
mrand48
Generates uniformly distributed pseudorandom number sequences. Returns
48-bit signed long integers.
Format
#include <stdlib.h>
long int mrand48 (void);
Description
This function generates pseudorandom numbers using the linear
congruential algorithm and 48-bit integer arithmetic.
It returns signed long integers uniformly distributed over the range of
y values such that -231 <= y < 231 .
Before you call the
mrand48
function, use either
srand48
,
seed48
, or
lcong48
to initialize the random number generator. You must initialize the
mrand48
function prior to invoking it, because it stores the last 48-bit Xi
generated into an internal buffer. (Although it is not recommended,
constant default initializer values are supplied automatically if the
drand48
,
lrand48
, or
mrand48
functions are called without first calling an initialization function.)
The function works by generating a sequence of 48-bit integer values,
Xi, according to the linear congruential formula:
Xn+1 = (aXn+c)mod m n >= 0
|
The argument m equals 248 , so 48-bit integer
arithmetic is performed. Unless you invoke the
lcong48
function, the multiplier value a and the addend value
c are:
a = 5DEECE66D16 = 2736731631558
c = B16 = 138
|
The values returned by the
mrand48
function is computed by first generating the next 48-bit Xi in the
sequence. Then the appropriate bits, according to the type of returned
data item, are copied from the high-order (most significant) bits of Xi
and transformed into the returned value.
See also
drand48
,
lrand48
,
lcong48
,
seed48
, and
srand48
in this section.
Return Values
n
|
Returns signed long integers uniformly distributed over the range -2
31
<= y < 2
31 .
|
msync
Synchronizes a mapped file.
Format
#include <mman.h>
int msync (void *addr, size_t len, int
flags);
Arguments
addr
The address of the region that you want to synchronize.
len
The length in bytes of the region that you want to synchronize.
flags
One of the following symbolic constants defined in the
<mman.h>
header file:
MS_SYNC
|
Synchronous cache flush
|
MS_ASYNC
|
Asynchronous cache flush
|
MS_INVALIDATE
|
Invalidate cashed pages
|
Description
This function controls the caching operations of a mapped file region.
Use
msync
to:
- Ensure that modified pages in the region transfer to the underlying
storage device of the file.
- Control the visibility of modifications with respect to file system
operations.
The addr and len arguments specify the region to be
synchronized. The len argument must be a multiple of the page
size as returned by
sysconf(_SC_PAGE_SIZE)
; otherwise, the length of the region is rounded up to the next
multiple of the page size.
If the flags argument is set to:
flags Argument |
Then the msync Function... |
MS_SYNC
|
Does not return until the system completes all I/O operations.
|
MS_ASYNC
|
Returns after the system schedules all I/O operations.
|
MS_INVALIDATE
|
Invalidates all cached copies of the pages. The operating system must
obtain new copies of the pages from the file system the next time the
application references them.
|
After a successful call to the
msync
function with the flags argument set to:
- MS_SYNC -- All previous modifications to the mapped region are
visible to processes using the
read
argument. Previous modifications to the file using the
write
function are lost.
- MS_INVALIDATE -- All previous modifications to the file using the
write
function are visible to the mapped region. Previous direct
modifications to the mapped region are lost.
See also
read
,
write
, and
sysconf
in this section.
Return Values
0
|
Indicates success.
|
--1
|
Indicates an error;
errno
is set to one of the following values:
- EIO -- An I/O error occurred while reading from or writing to the
file system.
- ENOMEM -- The range specified by [
addr, addr + len] is invalid for a process' address space, or
the range specifies one or more unmapped pages.
- EINVAL -- The
addr argument is not a multiple of the page size as returned by
sysconf(_SC_PAGE_SIZE)
.
- EFAULT -- The range [
addr, addr + len] includes an invalid address.
|
munmap
Unmaps a mapped region.
Format
#include <mman.h>
int munmap (void *addr, size_t len);
Arguments
addr
The address of the region that you want to unmap.
len
The length in bytes of that region the you want to unmap.
Description
This function unmaps a mapped file or shared memory region.
The addr and len arguments specify the address and
length in bytes, respectively, of the region to be unmapped.
The len argument must be a multiple of the page size as
returned by
sysconf(_SC_PAGE_SIZE)
; otherwise, the length of the region is rounded up to the next
multiple of the page size.
The result of using an address that lies in an unmapped region and not
in any subsequently mapped region is undefined.
See also
sysconf
in this section.
Return Values
0
|
Indicates success.
|
--1
|
Indicates an error;
errno
is set to one of the following values:
- ENIVAL -- The
addr argument is not a multiple of the page size as returned by
sysconf(_SC_PAGE_SIZE)
.
- EFAULT -- The range [
addr,
addr + len] includes an invalid address.
|
mv[w]addch
Move the cursor to coordinates (y,x) and add a character to the
specified window.
Format
#include <curses.h>
int mvaddch (int y, int x, char ch);
int mvwaddch (WINDOW *win, int y, int x,
char ch);
Arguments
win
A pointer to the window.
y
A window coordinate.
x
A window coordinate.
ch
If this argument is a new-line character (\n), the
mvaddch
and
mvwaddch
functions clear the line to the end, and move the cursor to the next
line at the same x coordinate. A carriage return (\r) moves the cursor
to the beginning of the specified line. A tab (\t) moves the cursor to
the next tabstop within the window.
Description
This routine performs the same function as
mvwaddch
, but on the
stdscr
window.
When
mvwaddch
is used on a subwindow, it writes the character onto the underlying
window as well.
Return Values
OK
|
Indicates success.
|
ERR
|
Indicates that writing the character would cause the screen to scroll
illegally. For more information, see the
scrollok
function in this section.
|
mv[w]addstr
Move the cursor to coordinates (y,x) and add the specified string, to
which str points, to the specified window.
Format
#include <curses.h>
int mvaddstr (int y, int x, char *str);
int mvwaddstr (WINDOW *win, int y, int x,
char *str);
Arguments
win
A pointer to the window.
y
A window coordinate.
x
A window coordinate.
str
A pointer to the character string.
Description
This routine performs the same function as
mvwaddstr
, but on the
stdscr
window.
When
mvwaddstr
is used on a subwindow, the string is written onto the underlying
window as well.
Return Values
OK
|
Indicates success.
|
ERR
|
Indicates that the function causes the screen to scroll illegally, but
it places as much of the string onto the window as possible. For more
information, see the
scrollok
function in this section.
|
mvcur
Moves the terminal's cursor from (lasty,lastx) to
(newy,newx).
Format
#include <curses.h>
int mvcur (int lasty, int lastx, int newy,
int newx);
Arguments
lasty
The cursor position.
lastx
The cursor position.
newy
The resulting cursor position.
newx
The resulting cursor position.
Description
In Compaq C for OpenVMS Systems,
mvcur
and
move
perform the same function.
See also
move
in this section.
Return Values
OK
|
Indicates success.
|
ERR
|
Indicates that moving the window put part or all of the window off the
edge of the terminal screen. The terminal screen remains unaltered.
|
|