Compaq C
Compaq C Run-Time Library Reference Manual for 
OpenVMS Systems
 
 
 
waitpid
 
Waits for a child process to stop or terminate.
 
 
Format
#include <wait.h>
pid_t waitpid (pid_t process_id, int 
*status_location, int options);
 
  
 
Arguments
process_id
The child process or set of child processes.
status_location
A pointer to a location that contains the termination status of the 
child process as defined in the
<wait.h>
header file.
Beginning with OpenVMS Version 7.2, when compiled with the _VMS_WAIT 
macro defined, this function puts the OpenVMS completion code of the 
child process at the address specified in the status_location 
argument.
 options
Flags that modify the behavior of the function. These flags are defined 
in the Description section.
 
 
Description
This function suspends the calling process until the request is 
completed. It is redefined so that only the calling thread is suspended.
If the process_id argument is --1 and the options 
argument is 0, the
waitpid
function behaves the same as the
wait
 function. If these arguments have other values, the
waitpid
 function is changed as specified by those values.
 
The process_id argument allows the calling process to gather 
status from a specific set of child processes, according to the 
following rules:
 
  
    | If the process_id is  | 
    Then status is requested  | 
   
  
    | 
      Equal to --1
     | 
    
      For any child process. In this respect, the
      
      waitpid
      
               function is equivalent to the
      
      wait
      
               function.
     | 
   
  
    | 
      Greater than 0
     | 
    
      For a single child process and specifies the process ID.
     | 
   
 
The
waitpid
 function only returns the status of a child process from this set.
 
The options argument to the
waitpid
 function modifies the behavior of the function. You can combine the 
 flags for the options argument by specifying their 
 bitwise-inclusive OR. The flags are:
 
  
    | 
      WCONTINUED
     | 
    
      Specifies that the following is reported to the calling process: the 
      status of any continued child process specified by the
      process_id argument whose status is unreported since it 
      continued.
     | 
   
  
    | 
      WNOWAIT
     | 
    
      Specifies that the process whose status is returned in
      status_location is kept in a waitable state. You can wait for 
      the process again with the same results.
     | 
   
  
    | 
      WNOHANG
     | 
    
      Prevents the calling process from being suspended. If there are child 
      processes that stopped or terminated, one is chosen and
      
      waitpid
      
               returns its pid, as when you do not specify the WNOHANG flag. If there 
               are no terminated processes (that is, if
      
      waitpid
      
               suspends the calling process without the WNOHANG flag), 0 (zero) is 
               returned. Because you can never wait for process 0, there is no 
               confusion arising from this return.
     | 
   
  
    | 
      WUNTRACED
     | 
    
      Specifies that the call return additional information when the child 
      processes of the current process stop because the child process 
      received a SIGTTIN, SIGTTOU, SIGSTOP, or SIGTSTOP signal.
     | 
   
 
If the
waitpid
 function returns because the status of a child process is available, 
 the process ID of the child process is returned. Information is stored 
 in the location pointed to by status_location, if this pointer 
 is not null. The value stored in the location pointed to by 
 status_location is 0 only if the status is returned from a 
 terminated child process that did one of the following:
 
  - Returned 0 from the
main
 function.
  
 - Passed 0 as the status argument to the
_exit
 or
exit
 function.
  
Regardless of the value of status_location, you can define 
this information using the macros defined in the
<wait.h>
 header file, which evaluate to integral expressions. In the following 
 function descriptions, status_value is equal to the integer 
 value pointed to by status_location:
 
  
    | 
      
      WIFEXITED
      
              (status_value
      
              )
     | 
    
      Evaluates to a nonzero value if status was returned for a child process 
      that terminated normally.
     | 
   
  
    | 
      
      WEXITSTATUS
      
              (status_value
      
              )
     | 
    
      If the value of
      
      WIFEXITED
      
              (status_value
      
              ) is nonzero, this macro evaluates to the low-order 8 bits of the
      status argument that the child process passed to the
      
      _exit
      
               or
      
      exit
      
               function, or to the value the child process returned from the
      
      main
      
               function.
     | 
   
  
    | 
      
      WIFSIGNALED
      
              (status_value
      
              )
     | 
    
      Evaluates to nonzero value if status returned for a child process that 
      terminated due to the receipt of a signal not caught.
     | 
   
  
    | 
      
      WTERMSIG
      
              (status_value
      
              )
     | 
    
      If the value of
      
      WIFSIGNALED
      
              (status_value
      
              ) is nonzero, this macro evaluates to the number of the signal that 
              caused the termination of the child process.
     | 
   
  
    | 
      
      WIFSTOPPED
      
              (status_value
      
              )
     | 
    
      Evaluates to a nonzero value if status was returned for a child process 
      that is currently stopped.
     | 
   
  
    | 
      
      WSTOPSIG
      
              (status_value
      
              )
     | 
    
      If the value of
      
      WIFSTOPPED
      
              (status_value
      
              ) is nonzero, this macro evaluates to the number of the signal that 
              caused the child process to stop.
     | 
   
  
    | 
      
      WIFCONTINUED
      
              (status_value
      
              )
     | 
    
      Evaluates to a nonzero value if status returned for a child process 
      that continued.
     | 
   
 
If the information stored at the location pointed to by 
status_location is stored there by a call to
waitpid
 that specified the
WUNTRACED
 flag, one of the following macros evaluates to a nonzero value:
 
  - 
WIFEXITED
(*status_value)
  
 - 
WIFSIGNALED
(*status_value)
  
 - 
WIFSTOPPED
(*status_value)
  
 - 
WIFCONTINUED
(*status_value)
  
If the information stored in the buffer pointed to by 
status_location resulted from a call to
waitpid
 without the
WUNTRACED
flag specified, one of the following macros evaluates to a nonzero 
value:
 
  - 
WIFEXITED
(*status_value)
  
 - 
WIFSIGNALED
(*status_value)
  
If a parent process terminates without waiting for all of its child 
processes to terminate, the remaining child processes is assigned a 
parent process ID equal to the process ID of the init process.
 
See also
exit
,
_exit
, and
wait
 in this section.
  
 
Return Values
  
    | 
      0
     | 
    
      Indicates success. If the
      
      WNOHANG
      
               option was specified, and there are no stopped or exited child 
               processes, the
      
      waitpid
      
               function also returns a value of 0.
     | 
   
  
    | 
      --1
     | 
    
      Indicates an error;
      
      errno
      
               is set to one of the following values:
      
      - ECHILD---The calling process has no existing unwaited-for child 
      processes. The process or process group ID specified by the
      process_id argument does not exist or is not a child process 
      of the calling process.
      
 - EINTR---The function was terminated by receipt of a signal.
      
 If the
      
      waitpid
      
               function returns because the status of a child process is available, 
               the process ID of the child is returned to the calling process. If they 
               return because a signal was caught by the calling process, --1 is 
               returned.
        - EFAULT--- The
      status_location argument points to a location outside of the 
      address space of the process.
      
 - EINVAL--- The value of the
      options argument is not valid.
      
  
     | 
   
 
 
 
wcrtomb
 
Converts the wide character to its multibyte character representation.
 
 
Format
#include <wchar.h>
size_t wcrtomb (char *s, wchar_t wc, mbstate_t 
*ps);
 
  
 
Arguments
s
A pointer to the resulting multibyte character.
wc
A wide character.
ps
A pointer to the
mbstate_t
 object. If a NULL pointer is specified, the function uses its internal
mbstate_t
 object.
mbstate_t
 is an opaque datatype intended to keep the conversion state for the 
 state-dependent codesets.
 
 
Description
If s is a NULL pointer, the
wcrtomb
 function is equivalent to the call:
 
where buf is an internal buffer.
 
If s is not a NULL pointer, the
wcrtomb
function determines the number of bytes needed to represent the 
multibyte character that corresponds to the wide character specified by 
wc (including any shift sequences), and stores the resulting 
bytes in the array whose first element is pointed to by s. At 
most
MB_CUR_MAX
 bytes are stored.
 
If wc is a null wide character, a null byte is stored preceded 
by any shift sequence needed to restore the initial shift state. The 
resulting state described is the initial conversion state.
  
 
Return Values
  
    | 
      n
     | 
    
      The number of bytes stored in the resulting array, including any shift 
      sequences to represent the multibyte character.
     | 
   
  
    | 
      --1
     | 
    
      Indicates an encoding error. The
      wc argument is not a valid wide character. The global
      
      errno
      
               is set to
      
      EILSEQ
      
              ; the conversion state is undefined.
     | 
   
 
 
 
wcscat
 
Concatenates two wide-character strings.
 
 
Format
#include <wchar.h>
wchar_t *wcscat (wchar_t *wstr_1, const wchar_t 
*wstr_2);
 
  
Function Variants This function also has variants named
_wcscat32
 and
_wcscat64
 for use with 32-bit and 64-bit pointer sizes, respectively. See 
 Section 1.10 for more information on using pointer-size-specific 
 functions.
 
Arguments
wstr_1, wstr_2
Pointers to null-terminated wide-character strings.
 
 
Description
This function appends the wide-character string wstr_2, 
including the terminating null character, to the end of 
wstr_1. See also
wcsncat
 in this section.
 
 
Return Values
  
    | 
      x
     | 
    
      The first argument,
      wstr_1, which is assumed to be large enough to hold the 
      concatenated result.
     | 
   
 
 
 
Example
 
  
    
       
      
#include <stdlib.h> 
#include <stdio.h> 
#include <wchar.h> 
#include <string.h> 
 
/* This program concatenates two wide-character strings using   */ 
/* the wcscat function, and then manually compares the result   */ 
/* to the expected result                                       */ 
 
#define S1LENGTH 10 
#define S2LENGTH 8 
 
main() 
{ 
    int i; 
    wchar_t s1buf[S1LENGTH + S2LENGTH]; 
    wchar_t s2buf[S2LENGTH]; 
    wchar_t test1[S1LENGTH + S2LENGTH]; 
 
    /* Initialize the three wide-character strings */ 
                                                                
 
    if (mbstowcs(s1buf, "abcmnexyz", S1LENGTH) == (size_t)-1) { 
 
        perror("mbstowcs"); 
        exit(EXIT_FAILURE); 
    } 
 
 
    if (mbstowcs(s2buf, " orthis", S2LENGTH) == (size_t)-1) { 
 
        perror("mbstowcs"); 
        exit(EXIT_FAILURE); 
    } 
 
    if (mbstowcs(test1, "abcmnexyz orthis", S1LENGTH + S2LENGTH) 
 
        == (size_t)-1) { 
 
        perror("mbstowcs"); 
        exit(EXIT_FAILURE); 
    } 
 
/* Concatenate s1buf with s2buf, placing the result into */ 
/* s1buf.  Then compare s1buf with the expected result   */ 
/* in test1.                                             */ 
 
    wcscat(s1buf, s2buf); 
 
    for (i = 0; i < S1LENGTH + S2LENGTH - 2; i++) { 
        /* Check that each character is correct */ 
        if (test1[i] != s1buf[i]) { 
            printf("Error in wcscat\n"); 
            exit(EXIT_FAILURE); 
        } 
    } 
 
    printf("Concatenated string: <%S>\n", s1buf); 
} 
 |   
Running the example produces the following result:
 
 
  
    
       
      
Concatenated string: <abcmnexyz orthis> 
 
 |   
 
 
wcschr
 
Scans for a wide character in a specifed wide-character string.
 
 
Format
#include <wchar.h>
wchar_t *wcschr (const wchar_t *wstr, wchar_t wc);
 
  
Function Variants This function also has variants named
_wcschr32
 and
_wcschr64
 for use with 32-bit and 64-bit pointer sizes, respectively. See 
 Section 1.10 for more information on using pointer-size-specific 
 functions.
 
Arguments
wstr
A pointer to a null-terminated wide-character string.
wc
A character of type
wchar_t
.
 
 
Description
This function returns the address of the first occurrence of a 
specified wide character in a null-terminated wide-character string. 
The terminating null character is considered to be part of the string. 
See also
wcsrchr
 in this section.
 
 
Return Values
  
    | 
      x
     | 
    
      The address of the first occurrence of the specified wide character.
     | 
   
  
    | 
      NULL
     | 
    
      Indicates that the wide character does not occur in the string.
     | 
   
 
 
 
Example
 
  
    
       
      
#include <stdlib.h> 
#include <stdio.h> 
#include <wchar.h> 
#include <string.h> 
 
#define BUFF_SIZE 50 
 
main() 
{ 
    int i; 
    wchar_t s1buf[BUFF_SIZE]; 
    wchar_t *status; 
 
    /* Initialize the buffer */ 
 
    if (mbstowcs(s1buf, "abcdefghijkl lkjihgfedcba", BUFF_SIZE) 
 
        == (size_t)-1) { 
 
        perror("mbstowcs"); 
        exit(EXIT_FAILURE); 
    } 
 
 /* This program checks the wcschr function by incrementally */ 
 /* going through a string that ascends to the middle and    */ 
 /* then descends towards the end.                           */ 
 
    for (i = 0; (s1buf[i] != '\0') && (s1buf[i] != ' '); i++) { 
        status = wcschr(s1buf, s1buf[i]); 
        /* Check for pointer to leftmost character - test 1. */ 
        if (status != &s1buf[i]) { 
            printf("Error in wcschr\n"); 
            exit(EXIT_FAILURE); 
        } 
    } 
 
    printf("Program completed successfully\n"); 
} 
 |   
When this example program is run, it produces the following result:
 
 
  
    
       
      
Program completed successfully 
 
 |   
 
 
wcscmp
 
Compares two wide-character strings. It returns an integer that 
indicates if the strings are different, and how they differ.
 
 
Format
#include <wchar.h>
int wcscmp (const wchar_t *wstr_1, const wchar_t 
*wstr_2);
 
  
 
Arguments
wstr_1, wstr_2
Pointers to null-terminated wide-character strings.
 
 
Description
This function compares the wide characters in wstr_1 with 
those in wstr_2. If the characters differ, the function 
returns:
  -  An integer less than 0, if the codepoint of the first differing 
  character in wstr_1 is less than the codepoint of the 
  corresponding character in wstr_2
  
 -  An integer greater than 0, if the codepoint of the first differing 
  character in wstr_1 is greater than the codepoint of the 
  corresponding character in wstr_2
  
If the wide-characters strings are identical, the function returns zero.
 
Unlike the
wcscoll
 function, the
wcscmp
 function compares the string based on the binary value of each wide 
 character.
 
See also
wcsncmp
 in this section.
  
 
Return Values
  
    | 
      < 0
     | 
    
      Indicates that
      wstr_1 is less than
      wstr_2.
     | 
   
  
    | 
      = 0
     | 
    
      Indicates that
      wstr_1 equals
      wstr_2.
     | 
   
  
    | 
      > 0
     | 
    
      Indicates that
      wstr_1 is greater than
      wstr_2.
     | 
   
 
 
 
wcscoll
 
Compares two wide-character strings and returns an integer that 
indicates if the strings differ, and how they differ. The function uses 
the collating information in the LC_COLLATE category of the current 
locale to determine how the comparison is performed.
 
 
Format
#include <wchar.h>
int wcscoll (const wchar_t *ws1, const wchar_t *ws2);
 
  
 
Arguments
ws1, ws2
Pointers to wide-character strings.
 
 
Description
This function, unlike
wcscmp
, compares two strings in a locale-dependent manner. Because no value 
is reserved for error indication, the application must check for one by 
setting
errno
 to 0 before the function call and testing it after the call.
See also the
wcsxfrm
 function in this section.
  
 
Return Values
  
    | 
      < 0
     | 
    
      Indicates that
      ws1 is less than
      ws2.
     | 
   
  
    | 
      0
     | 
    
      Indicates that the strings are equal.
     | 
   
  
    | 
      > 0
     | 
    
      Indicates that
      ws1 is greater than
      ws2.
     | 
   
 
 
 
wcscpy
 
Copies the wide-character string source, including the 
terminating null character, into dest.
 
 
Format
#include <wchar.h>
wchar_t *wcscpy (wchar_t *dest, const wchar_t 
*source);
 
  
Function Variants This function also has variants named
_wcscpy32
 and
_wcscpy64
 for use with 32-bit and 64-bit pointer sizes, respectively. See 
 Section 1.10 for more information on using pointer-size-specific 
 functions.
 
Arguments
dest
Pointer to the null-terminated wide-character destination string.
source
Pointer to the null-terminated wide-character source string.
 
 
Description
This function copies source into dest, and stops 
after copying source's null character. If copying takes place 
between two ovelapping strings, the behavior is undefined.
See also
wcsncpy
 in this section.
  
 
Return Values
 
 
wcscspn
 
Compares the characters in a wide-character string against a set of 
wide characters. The function returns the length of the initial 
substring that is comprised entirely of characters that are not in the 
set of wide characters.
 
 
Format
#include <wchar.h>
size_t wcscspn (const wchar_t *wstr1, const wchar_t 
*wstr2);
 
  
 
Arguments
wstr1
A pointer to a null-terminated wide-character string. If this is a null 
string, 0 is returned.
wstr2
A pointer to a null-terminated wide-character string that contains the 
set of wide characters for which the function will search.
 
 
Description
This function scans the wide characters in the string pointed to by 
wstr1 until it encounters a character found in wstr2. 
The function returns the length of the initial segment of 
wstr1 that is formed by characters not found in wstr2.
 
 
Return Values
  
    | 
      x
     | 
    
      The length of the segment.
     | 
   
 
 
 
Example
 
  
    
       
      
#include <stdlib.h> 
#include <stdio.h> 
#include <wchar.h> 
#include <string.h> 
 
/* This test sets up 2 strings, buffer and w_string, and */ 
/* then uses wcscspn() to calculate the maximum segment  */ 
/* of w_string, which consists entirely of characters    */ 
/* NOT from buffer.                                      */ 
 
#define BUFF_SIZE 20 
#define STRING_SIZE 50 
 
main() 
{ 
    wchar_t buffer[BUFF_SIZE]; 
    wchar_t w_string[STRING_SIZE]; 
    size_t result; 
 
    /* Initialize the buffer */ 
 
 
    if (mbstowcs(buffer, "abcdefg", BUFF_SIZE) == (size_t)-1) { 
 
        perror("mbstowcs"); 
        exit(EXIT_FAILURE); 
    } 
 
    /* Initialize the string */ 
 
    if (mbstowcs(w_string, "jklmabcjklabcdehjklmno", STRING_SIZE) 
 
        == (size_t)-1) { 
 
        perror("mbstowcs"); 
        exit(EXIT_FAILURE); 
    } 
 
/* Using wcscspn - work out the largest string in w_string */ 
/* which consists entirely of characters NOT from buffer   */ 
 
    result = wcscspn(w_string, buffer); 
    printf("Longest segment NOT found in w_string is: %d", result); 
 
} 
 |   
 
Running the example program produces the following result:
 
 
  
    
       
      
Longest segment NOT found in w_string is: 4 
 
 |   
  
         |