Compaq C
Compaq C Run-Time Library Reference Manual for 
OpenVMS Systems
 
 
 
va_start_1, va_start
 
Used for initializing a variable to the beginning of the argument list.
 
 
Format
#include <varargs.h> (COMPAQ C EXTENSION)
void va_start (va_list ap);
 
void va_start_1 (va_list ap, int offset);
 
  
 
Arguments
ap
An object pointer. You must declare and use the argument ap as 
shown in the format section.
offset
The number of bytes by which ap is to be incremented so that 
it points to a subsequent argument within the list (that is, not to the 
start of the argument list). Using a nonzero offset can initialize 
ap to the address of the first of the optional arguments that 
follow a number of fixed arguments.
 
 
Description
The
va_start
 macro initializes the variable ap to the beginning of the 
 argument list.
The
va_start_1
 macro initializes ap to the address of an argument that is 
 preceded by a known number of defined arguments. The
printf
 function is an example of a Compaq C RTL function that contains a 
 variable-length argument list offset from the beginning of the entire 
 argument list. The variable-length argument list is offset by the 
 address of the formatting string.
 
When determining value of the offset argument used in
va_start_1
 the implications of the OpenVMS calling standard must be considered.
 
On OpenVMS VAX, most argument items are a longword. For example, 
OpenVMS VAX arguments of types
char
 and
short
 use a full longword of memory when they are present in argument lists. 
 However, OpenVMS VAX arguments of type
float
use two longwords because they are converted to type
double
.
 
On OpenVMS Alpha, each argument item is a quadword.
 
 
  Note 
When accessing argument lists, especially those passed to a subroutine 
(written in C) by a program written in another programming language, 
consider the implications of the OpenVMS calling standard. For more 
information about the OpenVMS calling standard, see the Compaq C User's Guide for OpenVMS Systems 
or the OpenVMS Calling Standard. 
     | 
   
 
The preceding version of
va_start
 and
va_start_1
 is specific to the Compaq C RTL, and is not portable.
 
The following syntax describes the
va_start
 macro in the
<stdarg.h>
 header file, as defined in the ANSI C standard:
  
 
Format
#include <stdarg.h>  (ANSI C)
void va_start (va_list ap, parmN);
 
  
 
Arguments
ap
An object pointer. You must declare and use the argument ap as 
shown in the format section.
parmN
The name of the last of the known fixed arguments.
 
 
Description
The pointer ap is initialized to point to the first of the 
optional arguments that follow parmN in the argument list.
Always use this version of
va_start
 in conjunction with functions that are declared and defined with 
 function prototypes. Also use this version of
va_start
 to write portable programs.
 
For an example of argument-list processing using the <stdarg.h> 
functions and definitions, see Chapter 3, Example 3-6.
  
 
vfork
 
Creates an independent child process. This function is nonreentrant.
 
 
Format
#include <unistd.h>
int vfork (void);  (_DECC_V4_SOURCE)
 
pid_t vfork (void);  (NOT _DECC_V4_SOURCE)
 
  
 
Description
This function provided by Compaq C for  OpenVMS Systems differs from the
fork
 function provided by other C implementations. Table REF-12 shows the 
 two major differences.
 
  Table REF-12 The vfork and fork Functions
  
    | The vfork Function  | 
    The fork Function  | 
   
  
    | 
      Used with the exec functions.
     | 
    
      Can be used without an exec function for asynchronous processing.
     | 
   
  
    
      Creates an independent child
        process that shares some of
        the parent's characteristics.
     | 
    
      Creates an exact duplicate of the parent process that branches at the 
      point where
      
      vfork
      
               is called, as if the parent and the child are the same process at 
               different stages of execution.
     | 
   
 
The
vfork
 function provides the setup necessary for a subsequent call to an exec 
 function. Although no process is created by
vfork
, it performs the following steps:
 
  - It saves the return address (the address of the
vfork
call) to be used later as the return address for the call to an exec 
function.
  
 - It saves the current context.
  
 - It returns the integer 0 the first time it is called (before the 
  call to an exec function is made). After the corresponding exec 
  function call is made, the exec function returns control to the parent 
  process, at the point of the
vfork
 call, and it returns the process ID of the child as the return value. 
 Unless the exec function fails, control appears to return twice from
vfork
 even though one call was made to
vfork
 and one call was made to the exec function.
  
The behavior of the
vfork
 function is similar to the behavior
of the
setjmp
 function. Both
vfork
 and
setjmp
 establish a return address for later use, both return the integer 0 
 when they are first called to set up this address, and both pass back 
 the second return value as though it were returned by them rather
than by their corresponding exec or
longjmp
 function calls.
 
However, unlike
setjmp
, with
vfork
, all local automatic variables, even those with volatile-qualified 
type, can have indeterminate values if they are modified between the 
call to
vfork
 and the corresponding call to an exec routine.
  
 
Return Values
  
    | 
      0
     | 
    
      Indicates successful creation of the context.
     | 
   
  
    | 
      nonzero
     | 
    
      Indicates the process ID (PID) of the child process.
     | 
   
  
    | 
      --1
     | 
    
      Indicates an error -- failure to create the child process.
     | 
   
 
 
 
vfprintf
 
Prints formatted output based on an argument list.
 
 
Format
#include <stdio.h>
int vfprintf (FILE *file_ptr, const char *format, 
va_list arg);
 
  
 
Arguments
file_ptr
A pointer to the file to which the output is directed.
format
A pointer to a string containing the format specification. For more 
information about format and conversion specifications and their 
corresponding arguments, see Chapter 2.
arg
A list of expressions whose resultant types correspond to the 
conversion specifications given in the format specifications.
 
 
Description
See the
vprintf
 and
vsprintf
 functions in this section.
See Chapter 2 for information on format specifiers.
  
 
Return Values
  
    | 
      x
     | 
    
      The number of bytes written.
     | 
   
  
    | 
      Negative value
     | 
    
      Indicates an output error. The function sets
      
      errno
      
              . For a list of possible
      
      errno
      
               values set, see
      
      fprintf
      
               in this section.
     | 
   
 
 
 
vfscanf
 
Reads formatted input based on an argument list.
 
 
Format
#include <stdio.h>
int vfscanf (FILE *file_ptr, const char *format, 
va_list arg);
 
  
 
Arguments
file_ptr
A pointer to the file that provides input text.
format
A pointer to a string containing the format specification.
arg
A list of expressions whose resultant types correspond to the 
conversion specifications given in the format specifications.
 
 
Description
This function is the same as the
fscanf
 function except that instead of being called with a variable number of 
 arguments, it is called with an argument list that has been initialized 
 by
va_start
 (and possibly subsequent
va_arg
calls).
If no conversion specifications are given, you can omit the input 
pointers. Otherwise, the function calls must have exactly as many input 
pointers as there are conversion specifications, and the conversion 
specifications must match the types of the input pointers.
 
Conversion specifications are matched to input sources in left-to-right 
order. Excess input pointers, if any, are ignored.
 
For more information about format and conversion specifications and 
their corresponding arguments, see the "Understanding Input and Output" 
chapter of the Compaq C Run-Time Library Reference Manual for 
OpenVMS Systems.
 
This function returns the number of successfully matched and assigned 
input items.
 
Also see the
vscanf
 and
vsscanf
 functions in this section.
  
 
Return Values
  
    | 
      n
     | 
    
      The number of successfully matched and assigned input items.
     | 
   
  
    | 
      EOF
     | 
    
      Indicates that the end-of-file was encountered or a read error 
      occurred. If a read error occurs, the function sets
      
      errno
      
               to one of the following:
      
      - EILSEQ -- Invalid character detected.
      
 - EINVAL -- Insufficient arguments.
      
 - ENOMEM -- Not enough memory available for conversion.
      
 - ERANGE -- Floating-point calculations overflow.
      
 - EVMSERR -- Non-translatable VMS error.
      
      vaxc$errno
      
               contains the VMS error code. This can indicate that conversion to a 
               numeric value failed due to overflow.
      
  
               The function can also set
      
      errno
      
               to the following as a result of errors returned from the I/O subsystem:
       
      - EBADF -- The file descriptor is not valid.
      
 - EIO -- I/O error.
      
 - ENXIO -- Device does not exist.
      
 - EPIPE -- Broken pipe.
      
 - EVMSERR -- Non-translatable VMS error.
      
      vaxc$errno
      
               contains the VMS error code. This indicates that an I/O error occurred 
               for which there is no equivalent C error code.
      
  
     | 
   
 
 
 
vfwprintf
 
Writes output to the stream under control of the wide-character format 
string.
 
 
Format
#include <wchar.h>
int vfwprintf (FILE *stream, const wchar_t *format, 
va_list arg);
 
  
 
Arguments
stream
A file pointer.
format
A pointer to a wide-character string containing the format 
specifications. For more information about format and conversion 
specifications and their corresponding arguments, see Chapter 2.
arg
A variable list of the items needed for output.
 
 
Description
This function is equivalent to the
fwprintf
 function, with the variable argument list replaced by the arg 
 argument. Initialize
arg
with the
va_start
 macro (and possibly with subsequent
va_arg
 calls) from
<stdarg.h>
.
If the stream pointed to by stream has no orientation,
vfwprintf
 makes the stream wide-oriented.
 
See also
fwprintf
 in this section.
  
 
Return Values
  
    | 
      n
     | 
    
      The number of wide characters written.
     | 
   
  
    | 
      Negative value
     | 
    
      Indicates an error. The function sets
      
      errno
      
               to one of the following:
      
      - EILSEQ -- Invalid character detected.
      
 - EINVAL -- Insufficient arguments.
      
 - ENOMEM -- Not enough memory available for conversion.
      
 - ERANGE -- Floating-point calculations overflow.
      
 - EVMSERR -- Nontranslatable VMS error.
      
      vaxc$errno
      
               contains the VMS error code. This might indicate that conversion to a 
               numeric value failed because of overflow.
      
  
               The function can also set
      
      errno
      
               to the following as a result of errors returned from the I/O subsystem:
       
      - EBADF -- The file descriptor is not valid.
      
 - EIO -- I/O error.
      
 - ENOSPC -- No free space on the device containing the file.
      
 - ENXIO -- Device does not exist.
      
 - EPIPE -- Broken pipe.
      
 - ESPIPE -- Illegal seek in a file opened for append.
      
 - EVMSERR -- Nontranslatable VMS error.
      
      vaxc$errno
      
               contains the VMS error code. This indicates that an I/O error occurred 
               for which there is no equivalent C error code.
      
  
     | 
   
 
 
 
Examples
The following example shows the use of the
vfwprintf
 function in a general error reporting routine.
 
 
  
    
       
      
 #include <stdarg.h> 
 #include <stdio.h> 
 #include <wchar.h> 
 
 void error(char *function_name, wchar_t *format, ...); 
 { 
    va_list args; 
 
    va_start(args, format); 
    /* print out name of function causing error */
    fwprintf(stderr, L"ERROR in %s: ", function_name); 
    /* print out remainder of message */
    vfwprintf(stderr, format, args); 
    va_end(args); 
 } 
 |   
 
 
vfwscanf
 
Reads input from the stream under control of a wide-character format 
string.
 
 
Format
#include <wchar.h>
int vfwscanf (FILE *stream, const wchar_t *format, 
va_list arg);
 
  
 
Arguments
stream
A file pointer.
format
A pointer to a wide-character string containing the format 
specifications.
arg
A list of expressions whose resultant types correspond to the 
conversion specifications given in the format specifications.
 
 
Description
This function is equivalent to the
fwscanf
 function, except that instead of being called with a variable number of 
 arguments, it is called with an argument list (arg) that has 
 been initialized by
va_start
 (and possibly with subsequent
va_arg
 calls).
If the stream pointed to by stream has no orientation,
vfwscanf
 makes the stream wide-oriented.
 
For more information about format and conversion specifications and 
their corresponding arguments, see the "Understanding Input and Output" 
chapter of the Compaq C Run-Time Library Reference Manual for 
OpenVMS Systems.
  
 
Return Values
  
    | 
      n
     | 
    
      The number of successfully matched and assigned wide-character input 
      items.
     | 
   
  
    | 
      EOF
     | 
    
      Indicates that a read error occurred before any conversion. The 
      function sets
      
      errno
      
              . For a list of the values set by this function, see
      
      vfscanf
      
               in this section.
     | 
   
 
 
 
vprintf
 
Prints formatted output based on an argument list.
This function is the same as the
printf
 function except that instead of being called with a variable number of 
 arguments, it is called with an argument list that has been initialized 
 by the
va_start
 macro (and possibly with subsequent
va_arg
 calls) from
<stdarg.h>
.
  
 
Format
#include <stdio.h>
int vprintf (const char *format, va_list arg);
 
  
 
Arguments
format
A pointer to the string containing the format specification. For more 
information about format and conversion specifications and their 
corresponding arguments, see Chapter 2.
arg
A variable list of the items needed for output.
 
 
Description
See the
vfprintf
 and
vsprintf
 functions this section.
See Chapter 2 for information on format specifiers.
  
 
Return Values
  
    | 
      x
     | 
    
      The number of bytes written.
     | 
   
  
    | 
      Negative value
     | 
    
      Indicates an output error. The function sets
      
      errno
      
              . For a list of possible
      
      errno
      
               values set, see
      
      fprintf
      
               in this section.
     | 
   
 
 
 
vscanf
 
Reads formatted input based on an argument list.
 
 
Format
#include <stdio.h>
int vscanf (const char *format, va_list arg);
 
  
 
Arguments
format
A pointer to the string containing the format specification.
arg
A list of expressions whose resultant types correspond to the 
conversion specifications given in the format specifications.
 
 
Description
This function is the same as the
scanf
 function except that instead of being called with a variable number of 
 arguments, it is called with an argument list (arg) that has 
 been initialized by the
va_start
 macro (and possibly with subsequent
va_arg
 calls).
 
For more information about format and conversion specifications and 
their corresponding arguments, see the "Understanding Input and Output" 
chapter of the Compaq C Run-Time Library Reference Manual for 
OpenVMS Systems.
 
See the description of
scanf
 in the Compaq C Run-Time Library Reference Manual for OpenVMS 
 Systems.
 
Also see the
vfscanf
 and
vsscanf
 functions this section.
  
 
Return Values
  
    | 
      n
     | 
    
      The number of successfully matched and assigned input items.
     | 
   
  
    | 
      EOF
     | 
    
      Indicates that a read error occurred before any conversion. The 
      function sets
      
      errno
      
              . For a list of the values set by this function, see
      
      vfscanf
      
               in this section.
     | 
   
 
 
 
vsprintf
 
Prints formatted output based on an argument list.
This function is the same as the
sprintf
 function except that instead of being called with a variable number of 
 arguments, it is called with an argument list that has been initialized 
 by
va_start
 (and possibly with subsequent
va_arg
 calls).
  
 
Format
#include <stdio.h>
int vsprintf (char *str, const char *format, va_list 
arg);
 
  
 
Arguments
str
A pointer to a string that will receive the formatted output. This 
string is assumed to be large enough to hold the output.
format
A pointer to a character string that contains the format specification. 
For more information about format and conversion specifications and 
their corresponding arguments, see Chapter 2.
arg
A list of expressions whose resultant types correspond to the 
conversion specifications given in the format specifications.
 
 
Return Value
  
    | 
      x
     | 
    
      The number of bytes written.
     | 
   
  
    | 
      Negative value
     | 
    
      Indicates an output error occurred.The function sets
      
      errno
      
              . For a list of possible
      
      errno
      
               values set, see
      
      fprintf
      
               in this section.
     | 
   
 
 
 
vsscanf
 
Reads formatted input based on an argument list.
 
 
Format
#include <stdio.h>
int vsscanf (char *str, const char *format, va_list 
arg);
 
  
 
Arguments
str
The address of the character string that provides the input text to
sscanf
.
format
A pointer to a character string that contains the format specification.
arg
A list of expressions whose resultant types correspond to the 
conversion specifications given in the format specifications.
 
 
Description
This function is the same as the
sscanf
 function except that instead of being called with a variable number of 
 arguments, it is called with an argument list that has been initialized 
 by
va_start
 (and possibly with subsequent
va_arg
 calls).
The
vsscanf
 function is also equivalent to the
vfscanf
 function, except that the first argument specifies a wide-character 
 string rather than a stream. Reaching the end of the wide-character 
 string is the same as encountering EOF for the
vfscanf
 function.
 
See
vsscanf
 in this section and
sscanf
 in the Compaq C Run-Time Library Reference Manual for OpenVMS 
 Systems.
 
For more information about format and conversion specifications and 
their corresponding arguments, see the "Understanding Input and Output" 
chapter of the Compaq C Run-Time Library Reference Manual for 
OpenVMS Systems.
  
 
Return Value
  
    | 
      n
     | 
    
      The number of successfully matched and assigned input items.
     | 
   
  
    | 
      EOF
     | 
    
      Indicates that a read error occurred before any conversion. The 
      function sets
      
      errno
      
              . For a list of the values set by this function, see
      
      vfscanf
      
               in this section.
     | 
   
 
 
  
         |