dup3 - Linux


dup3 duplicates a file descriptor to the smallest available descriptor number greater than or equal to the given value. This allows for a file descriptor to be preserved or replicated across different processes.


dup3(oldfd, newfd)




Duplicate a file descriptor to file descriptor 6:

dup3(3, 6);

Preserve a file descriptor across a fork() call:

int fd = open("file.txt", O_RDWR);
pid_t pid = fork();
if (pid == 0) {  // Child process
    dup3(fd, 6);
    close(fd);  // Close the original file descriptor in the child
} else {  // Parent process
    close(fd);  // Close the original file descriptor in the parent

// Both processes can now use file descriptor 6 to access the file

Common Issues

  • Error code EBADF: The given oldfd is not a valid file descriptor.
  • Error code ENODEV: The newfd argument is not a valid file descriptor.


dup3() can be used in conjunction with other file management commands such as dup2() and dup(). It can also be integrated into custom scripts and programs to handle file descriptor manipulation.

Related Commands

  • dup(): Duplicates a file descriptor.
  • dup2(): Duplicates a file descriptor and replaces an existing one.
  • fcntl(): Manipulates file descriptor flags and control options.