/Python/dup2.c

http://unladen-swallow.googlecode.com/ · C · 30 lines · 15 code · 3 blank · 12 comment · 5 complexity · c47aadebd2453d08388531f1b6200576 MD5 · raw file

  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. #include <fcntl.h>
  14. #define BADEXIT -1
  15. int
  16. dup2(int fd1, int fd2)
  17. {
  18. if (fd1 != fd2) {
  19. if (fcntl(fd1, F_GETFL) < 0)
  20. return BADEXIT;
  21. if (fcntl(fd2, F_GETFL) >= 0)
  22. close(fd2);
  23. if (fcntl(fd1, F_DUPFD, fd2) < 0)
  24. return BADEXIT;
  25. }
  26. return fd2;
  27. }