Skip to Main Content United States    
PRODUCTS SUPPORT SOLUTIONS SERVICES
COMPAQ SOFTWARE
Compaq C

Compaq C
Run-Time Library Reference Manual for OpenVMS Systems


Previous Contents Index


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:


   wcrtomb (buf, L'\0', ps) 

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

x The address of source.

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 


Previous Next Contents Index
Buy Online or Call 1.800.888.0220      privacy statement and legal notices 
STORES CONTACT US SEARCH PRODUCTS SOLUTIONS OPTIONS DEVELOPERS