1 /* 2 * Public domain dup2() lookalike 3 * by Curtis Jackson @ AT&T Technologies, Burlington, NC 4 * electronic address: burl!rcj 5 * 6 * dup2 performs the following functions: 7 * 8 * Check to make sure that fd1 is a valid open file descriptor. 9 * Check to see if fd2 is already open; if so, close it. 10 * Duplicate fd1 onto fd2; checking to make sure fd2 is a valid fd. 11 * Return fd2 if all went well; return BADEXIT otherwise. 12 */ 13 14 #include <fcntl.h> 15 #include <unistd.h> 16 17 #define BADEXIT -1 18 19 int dup2(int fd1,int fd2)20dup2(int fd1, int fd2) 21 { 22 if (fd1 != fd2) { 23 if (fcntl(fd1, F_GETFL) < 0) 24 return BADEXIT; 25 if (fcntl(fd2, F_GETFL) >= 0) 26 close(fd2); 27 if (fcntl(fd1, F_DUPFD, fd2) < 0) 28 return BADEXIT; 29 } 30 return fd2; 31 } 32