[an error occurred while processing this directive]
HP OpenVMS SystemsC Programming Language |
Compaq C
|
Previous | Contents | Index |
Translates OpenVMS file specifications to UNIX style file specifications.
#include <unixlib.h>char *decc$translate_vms (const char *vms_filespec);
vms_filespec
The address of a null-terminated string containing a name in OpenVMS file specification format.
This function translates the given OpenVMS file specification into the equivalent UNIX style file specification, whether or not the file exists. The translated name string is stored in a thread-specific memory, which is overwritten by each call to decc$translate_vms from the same thread.This function differs from the decc$from_vms function, which does the conversion for existing files only.
x The address of a null-terminated string containing a name in UNIX style file specification format. 0 Indicates that the file name is null or syntactically incorrect. --1 Indicates that the file specification contains an ellipsis (for example, [...]a.dat), but is otherwise correct. You cannot translate the OpenVMS ellipsis syntax into a valid UNIX style file specification.
/* Demonstrate translation of a "UNIX" name to VMS form */ /* define a foreign command and pass the name as the */ /* argument. */ #include <unixlib.h> #include <stdio.h> int main(int argc, char *argv[]) { char *ptr; /* translation result */ ptr = decc$translate_vms( argv[1] ); if ((int) ptr == 0 || (int) ptr == -1) printf( "could not translate %s\n", argv[1]); else printf( "%s is translated to %s\n", argv[1], ptr ); }
Confirms that its argument is a valid wide character in the current program's locale.
#include <unistd.h>int decc$validate_wchar (wchar_t wc);
wc
Wide character to be validated.
This function provides a convenient way to verify whether a specified argument of wchar_t type is a valid wide character in the current program's locale.One reason to call decc$validate_wchar is that the isw * wide-character classification functions and macros do not validate their argument before dereferencing the classmask array describing character properties. Passing an isw * function a value that exceeds the maximum wide-character value for the current program's locale can result in an attempt to access memory beyond the allocated classmask array.
A standard way to validate a wide character is to call the wctomb function, but this way is less convenient because it requires declaring a multibyte character array of sufficient size and passing it to wctomb .
1 Indicates that the specified wide character is a valid wide character in the current program's locale. 0 Indicates that the specified wide character is not a valid wide character in the current program's locale. errno is not set.
Writes an end-of-file message to the mailbox.
#include <unistd.h>int decc$write_eof_to_mbx (int fd);
fd
File descriptor associated with the mailbox.
This function writes end-of-file message to the mailbox.For a mailbox that is not a pipe, the write function called with an nbytes argument value of 0 sends an end-of-file message to the mailbox. For a pipe, however, the only way to write an end-of-file message to the mailbox is to close the pipe.
If the child's standard input is redirected to a pipe through a call to the decc$set_child_standard_streams function, the parent process can call decc$write_eof_to_mbx for this pipe to send an EOF message to the child. It has the same effect as if the child read the data from a terminal, and Ctrl/Z was pressed.
After a call to decc$write_eof_to_mbx , the pipe can be reused for communication with another child, for example. This is the purpose of decc$write_eof_to_mbx : to allow reuse of the pipe instead of having to close it just to send an end-of-file message.
0 Indicates success --1 Indicates failure; errno and vaxc$errno are set according to the failure status returned by SYS$QIOW.
/* decc$write_eof_to_mbx_example.c */ #include <errno.h> #include <stdio.h> #include <string.h> #include <fcntl.h> #include <unistd.h> #include <unixio.h> #include <descrip.h> #include <ssdef.h> #include <starlet.h> int decc$write_eof_to_mbx( int ); main() { int status, nbytes, failed = 0; int fd, fd2[2]; short int channel; $DESCRIPTOR(mbxname_dsc, "TEST_MBX"); char c; /* first try a mailbox created by SYS$CREMBX */ status = sys$crembx(0, &channel, 0, 0, 0, 0, &mbxname_dsc, 0, 0); if ( status != SS$_NORMAL ) { printf("sys$crembx failed: %s\n",strerror(EVMSERR, status)); failed = 1; } if ( (fd = open(mbxname_dsc.dsc$a_pointer, O_RDWR, 0)) == -1) { perror("? open mailbox"); failed = 1; } if ( decc$write_eof_to_mbx(fd) == -1 ) { perror("? decc$write_eof_to_mbx to mailbox"); failed = 1; } if ( (nbytes = read(fd, &c, 1)) != 0 || errno != 0 ) { perror("? read mailbox"); printf("? nbytes = %d\n", nbytes); failed = 1; } if ( close(fd) == -1 ) { perror("? close mailbox"); failed = 1; } /* Now do the same thing with a pipe */ errno = 0; /* Clear errno for consistency */ if ( pipe(fd2) == -1 ) { perror("? opening pipe"); failed = 1; } if ( decc$write_eof_to_mbx(fd2[1]) == -1 ) { perror("? decc$write_eof_to_mbx to pipe"); failed = 1; } if ( (nbytes = read(fd2[0], &c, 1)) != 0 || errno != 0 ) { perror("? read pipe"); printf("? nbytes = %d\n", nbytes); failed = 1; } /* Close both file descriptors involved with the pipe */ if ( close(fd2[0]) == -1 ) { perror("close(fd2[0])"); failed = 1; } if ( close(fd2[1]) == -1 ) { perror("close(fd2[1])"); failed = 1; } if ( failed ) puts("?Example program failed"); else puts("Example ran to completion"); }This example program produces the following result:
Example ran to completion
Delete the character on the specified window at the current position of the cursor. The delch function operates on the stdscr window.
#include <curses.h>int delch();
int wdelch (WINDOW *win);
win
A pointer to the window.
All of the characters to the right of the cursor on the same line are shifted to the left, and a blank character is appended to the end of the line.
OK Indicates success. ERR Indicates an error.
Deletes a file.
#include <unixio.h>int delete (const char *file_spec);
file_spec
A pointer to the string that is an OpenVMS or UNIX style file specification. The file specification can include a wildcard in its version number (but not in any other part of the file spec). So, for example, files of the form filename.txt;* can be deleted.
If you specify a directory in the file name and it is a search list that contains an error, Compaq C for OpenVMS Systems interprets it as a file error.The remove and delete functions are functionally equivalent in the Compaq C RTL.
See also remove in this section.
Note
The delete routine is not available to C++ programmers because it conflicts with the C++ reserved word delete . C++ programmers should use the ANSI/ISO C standard function remove instead.
0 Indicates success. nonzero value Indicates that the operation has failed.
Delete the line at the current position of the cursor. The deleteln function acts on the stdscr window.
#include <curses.h>int deleteln();
int wdeleteln (WINDOW *win);
win
A pointer to the window.
Every line below the deleted line moves up, and the bottom line becomes blank. The current (y,x) coordinates of the cursor remain unchanged.
OK Indicates success. ERR Indicates an error.
Deletes the specified window from memory.
#include <curses.h>int delwin (WINDOW *win);
win
A pointer to the window.
If the window being deleted contains a subwindow, the subwindow is invalidated. Delete subwindows before deleting their parent. The delwin function refreshes all windows covered by the deleted window.
OK Indicates success. ERR Indicates an error.
Computes the difference, in seconds, between the two times specified by the time1 and time2 arguments.
#include <time.h>double difftime (time_t time2, time_t time1);
time2
A time value of type time_t .time1
A time value of type time_t .
The type time_t is defined in the <time.h> header file as follows:
typedef unsigned long int time_t
n time2 -- time1 in seconds expressed as a double .
Reports the parent directory name of a file path name.
#include <libgen.h>Function Variants This function also has variants named _dirname32 and _dirname64 for use with 32-bit and 64-bit pointer sizes, respectively. See Section 1.10 for more information on using pointer-size-specific functions.char *dirname (char *path);
path
The file path name.
This function takes a pointer to a character string that contains a UNIX path name and returns a pointer to a string that is a path name of the parent directory of that file. Trailing '/' (slash) characters in the path are not counted as part of the path.The dirname function returns a pointer to the string "." (dot), when the path argument:
- Does not contain a '/' (slash).
- Is a NULL pointer.
- Points to an empty string.
The dirname function can modify the string pointed to by the path argument.
The dirname and basename functions together yield a complete path name. The expression dirname (path) obtains the path name of the directory where basename (path) is found.
See also basename in this section.
x A pointer to a string that is the parent directory of the path argument. "." The path argument:
- Does not contain a '/' (slash).
- Is a NULL pointer.
- Points to an empty string.
Using the dirname function, the following example reads a path name, changes the current working directory to the parent directory, and opens a file.
char path [MAXPATHLEN], *pathcopy; int fd; fgets(path, MAXPATHLEN, stdin); pathcopy = strdup(path); chdir(dirname(pathcopy)); fd = open(basename(path), O_RDONLY);
Returns the quotient and the remainder after the division of its arguments.
#include <stdlib.h>div_t div (int numer, int denom);
numer
A numerator of type int .denom
A denominator of type int .
The type div_t is defined in the standard header file <stdlib.h> as follows:
typedef struct { int quot, rem; } div_t;
Deallocates the address space for a shared library.
#include <stdio.h>void dlclose (void *handle);
handle
Pointer to the shared library.
The dlclose function deallocates the address space allocated by the Compaq C RTL for the handle.There is no way on OpenVMS systems to "unload" a shareable image dynamically loaded by the LIB$FIND_IMAGE_SYMBOL routine, which is the routine called by the dlsym function. In other words, there is no way on OpenVMS systems to release the address space occupied by the shareable image brought into memory by dlsym .
Returns a string describing the last error that occurred from a call to dlopen , dlclose , or dlsym .
#include <stdio.h>char *dlerror (void);
x A string describing the last error that occurred from a call to dlopen , dlclose , or dlsym .
Provides an interface to the dynamic library loader to allow shareable images to be loaded and called at run time.
#include <stdio.h>void *dlopen (char *pathname, int mode);
pathname
The name of the shareable image. This name is saved for subsequent use by the dlsym function.mode
This argument is ignored on OpenVMS systems.
This function provides an interface to the dynamic library loader to allow shareable images to be loaded and called at run time.The dlopen function does not load a shareable image but rather saves its pathname argument for subsequent use by the dlsym function. dlsym is the function that actually loads the shareable image through a call to LIB$FIND_IMAGE_SYMBOL.
The pathname argument of the dlopen function must be the name of the shareable image. This name is passed as-is by the dlsym function to the LIB$FIND_IMAGE_SYMBOL routine as the filename argument. No image-name argument is specified in the call to LIB$FIND_IMAGE_SYMBOL, so default file specification of SYS$SHARE:.EXE is applied to the image name.
The dlopen function returns a handle that is used by a dlsym or dlclose call. If an error occurs, a NULL pointer is returned.
x A handle to be used by a dlsym or dlclose call. NULL Indicates an error.
Returns the address of the symbol name found in a shareable image.
#include <stdio.h>void *dlsym (void *handle, char *name);
handle
Pointer to the shareable image.
The dlsym function returns the address of the symbol name found in the shareable image corresponding to handle. If the symbol is not found, a NULL pointer is returned.
x Address of the symbol name found. NULL Indicates that the symbol was not found.
Generates uniformly distributed pseudorandom number sequences. Returns 48-bit, nonnegative, double-precision floating-point values.
#include <stdlib.h>double drand48 (void);
This function generates pseudorandom numbers using the linear congruential algorithm and 48-bit integer arithmetic.It returns non-negative, double-precision, floating-point values uniformly distributed over the range of y values such that 0.0 <= y < 1.0.
Before you call drand48 , use either srand48 , seed48 , or lcong48 to initialize the random number generator. You must initalize prior to invoking the drand48 function 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 drand48 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 >= 0The argument m equals 248 , so 48-bit integer arithmetic is performed. Unless you invoke lcong48 , the multiplier value a and the addend value c are:
a = 5DEECE66D16 = 2736731631558 c = B16 = 138The values returned by drand48 are 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 srand48 , seed48 , lcong48 , lrand48 , and mrand48 in this section.
n A nonnegative, double-precision, floating-point value.
Previous | Next | Contents | Index |