中间件,开发工具,实时操作系统软件和支持服务,助您完成卓越的嵌入式设计
Home
Developer Resources

dup

PDF Documents
More resources

dup()

Duplicate a file descriptor

Synopsis:

#include <unistd.h>

int dup( int filedes );

Arguments:

filedes
The file descriptor that you want to duplicate.

Library:

libc

Use the -l c option to qcc to link against this library. This library is usually included automatically.

Description:

The dup() function duplicates the file descriptor specified by filedes. The new file descriptor refers to the same open file descriptor as the original, and shares any locks. The new file descriptor also:

Changing the file position with one descriptor results in a changed position for the other.

Calling:

dup_filedes = dup( filedes );

is the same as:

dup_filedes = fcntl( filedes, F_DUPFD, 0 );

Returns:

The new file descriptor for success, or -1 if an error occurs (errno is set).

Errors:

EBADF
The file descriptor, filedes, isn't a valid.
EMFILE
There are already OPEN_MAX file descriptors in use.
ENOSYS
The dup() function isn't implemented for the filesystem specified by filedes.

Examples:

#include <fcntl.h>
#include <unistd.h>
#include <sys/stat.h>
#include <stdlib.h>

int main( void )
{
    int filedes, dup_filedes;

    filedes= open( "file",
        O_WRONLY | O_CREAT | O_TRUNC,
        S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP );

    if( filedes != -1 ) {
        dup_filedes = dup( filedes );
        if( dup_filedes != -1 ) {
            /* process file */
            /* ... */

            close( dup_filedes );
        }
        close( filedes );
        
        return EXIT_SUCCESS;
    }
    
    return EXIT_FAILURE;
}

Classification:

POSIX 1003.1

Safety:
Cancellation point No
Interrupt handler No
Signal handler Yes
Thread Yes

See also:

chsize(), close(), creat(), dup2(), eof(), errno, execl(), execle(), execlp(), execlpe(), execv(), execve(), execvp(), execvpe(), fcntl(), fileno(), fstat(), isatty(), lseek(), open(), read(), sopen(), stat(), tell(), umask(), write()

 
©2013 QNX Software Systems Limited, a subsidiary of BlackBerry.   BlackBerry Logo