|
Compaq C
Compaq C Run-Time Library Reference Manual for
OpenVMS Systems
unordered (ALPHA ONLY)
Returns the value 1 (True) if either or both of the arguments is a NaN.
Otherwise, it returns the value 0 (False).
Format
#include <math.h>
double unordered (double x, double y);
float unorderedf (float x, float y);
long double unorderedl (long double x, long double y);
Argument
x
A real number.
y
A real number.
Return Values
1
|
Either or both of the arguments is a NaN.
|
0
|
Neither argument is a NaN.
|
utime
Sets file access and modification times.
Format
#include <types.h>
int utime (const char *path, const struct utimbuf
*times);
Argument
path
A pointer to a file.
times
A null pointer or a pointer to a
utimbuf
structure.
Description
The
utime
function sets the access and modification times of the file named by
the path argument.
If times is a null pointer, the access and modification times
of the file are set to the current time. To use
utime
in this way, the effective user ID of the process must match the owner
of the file, or the process must have write permission to the file or
have appropriate privileges.
If times is not a null pointer, it is interpreted as a pointer
to a
utimbuf
structure, and the access and modification times are set to the values
in the specified structure. Only a process with an effective user ID
equal to the user ID of the file or a process with appropriate
privileges can use
utime
this way.
The
utimbuf
structure is defined by the
<utime.h>
header. The times in the
utimbuf
structure are measured in seconds since the Epoch.
Upon successful completion,
utime
marks the time of the last file status change, st_ctime, to be
updated. See the <stat.h> header file.
Note
(ALPHA ONLY)
On OpenVMS Alpha systems, the
stat
,
fstat
,
utime
, and
utimes
functions have been enhanced to take advantage of the new file-system
support for POSIX-compliant file timestamps.
This support is available only on ODS-5 devices on OpenVMS Alpha
systems beginning with a version of OpenVMS Alpha after Version 7.3.
Before this change, the
stat
and
fstat
functions were setting the values of the st_ctime, st_mtime, and
st_atime fields based on the following file attributes:
st_ctime - ATR$C_CREDATE (file creation time)
st_mtime - ATR$C_REVDATE (file revision time)
st_atime - was always set to st_mtime because no support for file
access time was available
Also, for the file-modification time,
utime
and
utimes
were modifying the ATR$C_REVDATE file attribute, and ignoring the
file-access-time argument.
After the change, for a file on an ODS-5 device, the
stat
and
fstat
functions set the values of the st_ctime, st_mtime, and st_atime fields
based on the following new file attributes:
st_ctime - ATR$C_ATTDATE (last attribute modification time)
st_mtime - ATR$C_MODDATE (last data modification time)
st_atime - ATR$C_ACCDATE (last access time)
If ATR$C_ACCDATE is zero, as on an ODS-2 device, the
stat
and
fstat
functions set st_atime to st_mtime.
For the file-modification time, the
utime
and
utimes
functions modify both the ATR$C_REVDATE and ATR$C_MODDATE file
attributes. For the file-access time, these functions modify the
ATR$C_ACCDATE file attribute. Setting the ATR$C_MODDATE and
ATR$C_ACCDATE file attributes on an ODS-2 device has no effect.
For compatibility, the old behavior of
stat
,
fstat
,
utime
and
utimes
remains the default, regardless of the kind of device.
The new behavior must be explicitly enabled by defining the
DECC$EFS_FILE_TIMESTAMPS logical name to "ENABLE" before invoking the
application. Setting this logical does not affect the behavior of
stat
,
fstat
,
utime
and
utimes
for files on an ODS-2 device.
|
Return Values
0
|
Successful execution.
|
-1
|
Indicates an error. The function sets
errno
to one of the following values:
The
utime
function
will fail if:
- EACCES -- Search permission is denied by a component of the
path prefix; or the
times argument is a null pointer and the effective user ID of
the process does not match the owner of the file and write access is
denied.
- ELOOP -- Too many symbolic links were encountered in resolving
path.
- ENAMETOOLONG -- The length of the
path argument exceeds {PATH_MAX}, a path name component is
longer than {NAME_MAX}, or a path name resolution of a symbolic link
produced an intermediate result whose length exceeds {PATH_MAX}.
- ENOENT -- A component of
path does not name an existing file, or path is an empty
string.
- ENOTDIR -- A component of the
path prefix is not a directory.
- EPERM --The
times argument is not a null pointer and the calling process'
effective user ID has write-access to the file but does not match the
owner of the file and the calling process does not have the appropriate
privileges.
- EROFS -- The file system containing the file is read-only.
|
utimes
Sets file access and modification times.
Format
#include <time.h>
int utimes (const char *path, const struct timeval
times[2]);
Argument
path
A pointer to a file.
times
an array of
timeval
structures. The first array member represents the date and time of last
access, and the second member represents the date and time of last
modification. The times in the
timeval
structure are measured in seconds and microseconds since the Epoch,
although rounding toward the nearest second may occur.
Description
The
utimes
function sets the access and modification times of the file pointed to
by the path argument to the value of the times argument. The
utimes
function allows time specifications accurate to the microsecond.
If the times argument is a null pointer, the access and
modification times of the file are set to the current time. The
effective user ID of the process must be the same as the owner of the
file, or must have write access to the file or appropriate privileges
to use this call in this manner.
Upon completion,
utimes
marks the time of the last file status change, st_ctime, for
update.
Note
(ALPHA ONLY)
On OpenVMS Alpha systems, the
stat
,
fstat
,
utime
, and
utimes
functions have been enhanced to take advantage of the new file-system
support for POSIX-compliant file timestamps.
This support is available only on ODS-5 devices on OpenVMS Alpha
systems beginning with a version of OpenVMS Alpha after Version 7.3.
Before this change, the
stat
and
fstat
functions were setting the values of the st_ctime, st_mtime, and
st_atime fields based on the following file attributes:
st_ctime - ATR$C_CREDATE (file creation time)
st_mtime - ATR$C_REVDATE (file revision time)
st_atime - was always set to st_mtime because no support for file
access time was available
Also, for the file-modification time,
utime
and
utimes
were modifying the ATR$C_REVDATE file attribute, and ignoring the
file-access-time argument.
After the change, for a file on an ODS-5 device, the
stat
and
fstat
functions set the values of the st_ctime, st_mtime, and st_atime fields
based on the following new file attributes:
st_ctime - ATR$C_ATTDATE (last attribute modification time)
st_mtime - ATR$C_MODDATE (last data modification time)
st_atime - ATR$C_ACCDATE (last access time)
If ATR$C_ACCDATE is zero, as on an ODS-2 device, the
stat
and
fstat
functions set st_atime to st_mtime.
For the file-modification time, the
utime
and
utimes
functions modify both the ATR$C_REVDATE and ATR$C_MODDATE file
attributes. For the file-access time, these functions modify the
ATR$C_ACCDATE file attribute. Setting the ATR$C_MODDATE and
ATR$C_ACCDATE file attributes on an ODS-2 device has no effect.
For compatibility, the old behavior of
stat
,
fstat
,
utime
and
utimes
remains the default, regardless of the kind of device.
The new behavior must be explicitly enabled by defining the
DECC$EFS_FILE_TIMESTAMPS logical name to "ENABLE" before invoking the
application. Setting this logical does not affect the behavior of
stat
,
fstat
,
utime
and
utimes
for files on an ODS-2 device.
|
Return Values
0
|
Successful execution.
|
-1
|
Indicates an error. The file times do not change and the function sets
errno
to one of the following values:
The
utimes
function
will fail if:
- EACCES -- Search permission is denied by a component of the
path prefix; or the
times argument is a null pointer and the effective user ID of
the process does not match the owner of the file and write access is
denied.
- ELOOP -- Too many symbolic links were encountered in resolving
path.
- ENAMETOOLONG -- The length of the
path argument exceeds {PATH_MAX}, a path name component is
longer than {NAME_MAX}, or a path name resolution of a symbolic link
produced an intermediate result whose length exceeds {PATH_MAX}.
- ENOENT -- A component of
path does not name an existing file, or path is an empty
string.
- ENOTDIR -- A component of the
path prefix is not a directory.
- EPERM --The
times argument is not a null pointer and the calling process'
effective user ID has write-access to the file but does not match the
owner of the file and the calling process does not have the appropriate
privileges.
- EROFS -- The file system containing the file is read-only.
|
unsetenv
Deletes all instances of the environment variable name from the
environment list.
Format
#include <stdlib.h>
void unsetenv (const char *name);
Arguments
name
The environment variable to delete from the environment list.
Description
This function deletes all instances of the variable name pointed to by
the name argument from the environment list.
usleep
Suspends execution for an interval.
Format
#include <unistd.h>
int usleep (unsigned int mseconds);
Arguments
mseconds
The number of microseconds to suspend execution for.
Description
This function suspends the current process from execution for the
number of microseconds specified by the mseconds argument.
This argument must be less than 1,000,000. However, if its value is 0,
then the call has no effect.
There is one real-time interval timer for each process. The
usleep
function does not interfere with a previous setting of this timer. If
the process set this timer before calling
usleep
and if the time specified by mseconds equals or exceeds the
interval timer's prior setting, then the process is awakened shortly
before the timer was set to expire.
Return Values
0
|
Indicates success.
|
--1
|
Indicates an error occurred;
errno
is set to EINVAL.
|
VAXC$CRTL_INIT
Allows you to call the Compaq C RTL from other languages or to use
the Compaq C RTL when your main function is not in C. It initializes
the run-time environment and establishes both an exit and condition
handler.
VAXC$CRTL_INIT
is a synonym for
DECC$CRTL_INIT
. Either name invokes the same routine.
Format
#include <signal.h>
void VAXC$CRTL_INIT();
Description
The following example shows a Pascal program that calls the
Compaq C RTL using the
VAXC$CRTL_INIT
function:
On OpenVMS VAX systems:
$ PASCAL EXAMPLE
$ LINK EXAMPLE,SYS$LIBRARY:DECCRTL/LIB
$ TY EXAMPLE.PAS
PROGRAM TESTC(input, output);
PROCEDURE VAXC$CRTL_INIT; extern;
BEGIN
VAXC$CRTL_INIT;
END
$
|
On OpenVMS Alpha systems:
$ PASCAL EXAMPLE
$ LINK EXAMPLE,SYS$LIBRARY:VAXCRTL/LIB
$ TY EXAMPLE.PAS
PROGRAM TESTC(input, output);
PROCEDURE VAXC$CRTL_INIT; extern;
BEGIN
VAXC$CRTL_INIT;
END
$
|
A shareable image need only call this function if it contains a
Compaq C function for signal handling, environment variables,
I/O, exit handling, a default file protection mask, or if it is a child
process that should inherit context.
Although many of the initialization activities are performed only once,
DECC$CRTL_INIT
can safely be called multiple times. On OpenVMS VAX systems,
DECC$CRTL_INIT
establishes the Compaq C RTL internal OpenVMS exception handler in
the frame of the routine that calls
DECC$CRTL_INIT
each time
DECC$CRTL_INIT
is called.
At least one frame in the current call stack must have that handler
established for OpenVMS exceptions to get mapped to UNIX signals.
VAXC$ESTABLISH
Used for establishing an OpenVMS exception handler for a particular
routine. This function establishes a special Compaq C RTL exception
handler in the routine that called it. This special handler catches all
RTL-related exceptions that occur in later routines, and passes on all
other exceptions to your handler.
Format
#include <signal.h>
void VAXC$ESTABLISH (unsigned int (*exception_handler)(void
*sigarr, void *mecharr));
Arguments
exception_handler
The name of the function that you want to establish as an OpenVMS
exception handler. You pass a pointer to this function as the parameter
to VAXC$ESTABLISH.
sigarr
A pointer to the signal array.
mecharr
A pointer to the mechanism array.
Description
VAXC$ESTABLISH
must be used in place of LIB$ESTABLISH when programs use the
Compaq C RTL routines
setjmp
or
longjmp
. See
setjmp
and
longjmp
, or
sigsetjmp
and
siglongjmp
in this section.
You can only invoke the
VAXC$ESTABLISH
function from a Compaq C for OpenVMS function, because it relies on the
allocation of data space on the run-time stack by
the Compaq C compiler. Calling the OpenVMS system library routine
LIB$ESTABLISH directly from a Compaq C function results in
undefined
behavior from the
setjmp
and
longjmp
functions.
To cause an OpenVMS exception to generate a UNIX style signal, user
exception handlers must return SS$_RESIGNAL upon receiving any
exception that they do not want to handle. Returning SS$_NORMAL
prevents the generation of a UNIX style signal. UNIX signals are
generated as if by an exception handler in the stack frame of the main
C program. Not all OpenVMS exceptions correspond to UNIX signals. See
Chapter 4 for more information on the interaction of OpenVMS
exceptions and UNIX style signals.
Calling
VAXC$ESTABLISH
with an argument of NULL cancels an existing handler in that routine.
Notes
- On OpenVMS Alpha systems, VAXC$ESTABLISH is implemented as a
compiler built-in function, not as a Compaq C RTL function.
(ALPHA ONLY)
- On OpenVMS VAX systems, programs compiled with /NAMES=AS_IS should
link against SYS$LIBRARY:DECCRTL.OLB to resolve the name
VAXC$ESTABLISH, whether or not the program is compiled with the
/PREFIX_LIBRARY_ENTRIES switch. This is a restriction in the
implementation. (VAX ONLY)
|
va_arg
Used for returning the next item in the argument list.
Format
#include <stdarg.h> (ANSI C)
#include <varargs.h> (COMPAQ C EXTENSION)
type va_arg (va_list ap, type);
Arguments
ap
A variable list containing the next argument to be obtained.
type
A data type that is used to determine the size of the next item in the
list. An argument list can contain items of varying sizes, but the
calling routine must determine what type of argument is expected since
it cannot be determined at run time.
Description
This function interprets the object at the address specified by the
list incrementor according to type. If there is no corresponding
argument, the behavior is undefined.
When using
va_arg
to write portable applications, include the
<stdarg.h>
header file (defined by the ANSI C standard), not the
<varargs.h>
header file, and use
va_arg
only in conjunction with other functions and macros defined in
<stdarg.h>
.
For an example of argument-list processing using the <stdarg.h>
functions and definitions, see Chapter 3, Example 3-6.
va_count
Returns the number of longwords (VAX ONLY) or quadwords
(ALPHA ONLY) in the argument list.
Format
#include <stdarg.h> (ANSI C)
#include <varargs.h> (COMPAQ C EXTENSION)
void va_count (int *count);
Argument
count
An integer variable name in which the number of longwords
(VAX ONLY) or quadwords (ALPHA ONLY) is returned.
Description
This function places the number of longwords (VAX ONLY) or
quadwords (ALPHA ONLY) in the argument list into count. The
value returned in count is the number of longwords
(VAX ONLY) or quadwords (ALPHA ONLY) in the function argument
block not counting the count field itself.
If the argument list contains items whose storage requirements are a
longword (VAX ONLY) or quadword (ALPHA ONLY) of memory or less,
the number in the count argument is also the number of
arguments. However, if the argument list contains items that are longer
than a longword (VAX ONLY) or a quadword (ALPHA ONLY),
count must be interpreted to obtain the number of arguments.
Because a
double
is 8 bytes, it occupies two argument-list positions on OpenVMS VAX
systems, and one argument-list position on OpenVMS Alpha systems.
This function is specific to Compaq C for OpenVMS Systems and is not portable.
va_end
Finishes the
<varargs.h>
or
<stdarg.h>
session.
Format
#include <stdarg.h> (ANSI C)
#include <varargs.h> (COMPAQ C EXTENSION)
void va_end (va_list ap);
Argument
ap
The object used to traverse the argument list length. You must declare
and use the argument ap as shown in this format section.
Description
You can execute multiple traversals of the argument list, each
delimited by
va_start
...
va_end
. The
va_end
function sets ap equal to NULL.
When using this function to write portable applications, include the
<stdarg.h>
header file (defined by the ANSI C standard), not the
<varargs.h>
header file, and use
va_end
only in conjunction with other routines defined in
<stdarg.h>
.
For an example of argument-list processing using the <stdarg.h>
functions and definitions, see Chapter 3, Example 3-6.
|
|
|