Retro video games delivered to your door every month!
Click above to get retro games delivered to your door ever month!
X-Hacker.org- Watcom C Library Reference - <u>synopsis:</u> http://www.X-Hacker.org [<<Previous Entry] [^^Up^^] [Next Entry>>] [Menu] [About The Guide]
Synopsis:
    #include <io.h>
    long _get_osfhandle( int posixhandle );

Description:
    The _get_osfhandle function returns the operating system's internal file
    handle that corresponds to the POSIX-level file handle specified by
    posixhandle.

    The value returned by _get_osfhandle can be used as an argument to the
     _open_osfhandle function which can be used to connect a second
    POSIX-level handle to an open file.

    The example below demonstrates the use of these two functions.  Note
    that the example shows how the  dup2 function can be used to obtain
    almost identical functionality.

    When the POSIX-level file handles associated with one OS file handle are
    closed, the first one closes successfully but the others return an error
    (since the first call close the file and released the OS file handle).
     So it is important to call  close at the right time, i.e., after all
    I/O operations are completed to the file.

Returns:
    If successful, _get_osfhandle returns an operating system file handle
    corresponding to posixhandle.  Otherwise, it returns -1 and sets  errno
    to  EBADF, indicating an invalid file handle.

Example:
    #include <stdio.h>
    #include <stdlib.h>
    #include <io.h>
    #include <fcntl.h>

    void main()
    {
        long os_handle;
        int fh1, fh2, rc;

        fh1 = open( "file",
                    O_WRONLY | O_CREAT | O_TRUNC | O_BINARY,
                    S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP );
        if( fh1 == -1 ) {
            printf( "Could not open output file\n" );
            exit( EXIT_FAILURE );
        }
        printf( "First POSIX handle %d\n", fh1 );

    #if defined(USE_DUP2)
        fh2 = 6;
        if( dup2( fh1, fh2 ) == -1 ) fh2 = -1;
    #else
        os_handle = _get_osfhandle( fh1 );
        printf( "OS Handle %ld\n", os_handle );

        fh2 = _open_osfhandle( os_handle, O_WRONLY |
                                          O_BINARY );
    #endif
        if( fh2 == -1 ) {
            printf( "Could not open with second handle\n" );
            exit( EXIT_FAILURE );
        }
        printf( "Second POSIX handle %d\n", fh2 );

        rc = write( fh2, "trash\x0d\x0a", 7 );
        printf( "Write file using second handle %d\n", rc );

        rc = close( fh2 );
        printf( "Closing second handle %d\n", rc );
        rc = close( fh1 );
        printf( "Closing first handle %d\n", rc );
    }

Classification:
    WATCOM

Systems:
    DOS, Windows, Win386, Win32, OS/2 1.x(all), OS/2-32, Netware

See Also:
    close, dup2, fdopen, _hdopen, open, _open_osfhandle, _os_handle

See Also: dup2 _hdopen

Online resources provided by: http://www.X-Hacker.org --- NG 2 HTML conversion by Dave Pearson