closeonexec.c
上传用户:minyiyu
上传日期:2018-12-24
资源大小:864k
文件大小:1k
源码类别:

Telnet服务器

开发平台:

Unix_Linux

  1. /*
  2.  * $Id: closeonexec.c,v 1.1 2000/01/15 01:45:34 edwardc Exp $
  3.  */
  4. #include <stdio.h>
  5. #include <sys/types.h>
  6. #include <errno.h>
  7. #include "clibrary.h"
  8. #ifdef LINUX
  9. #ifndef FIOCLEX
  10. #define FIOCLEX 0x5451
  11. #endif
  12. #ifndef FIONCLEX
  13. #define FIONCLEX 0x5450
  14. #endif
  15. #endif
  16. #ifndef CLX_IOCTL
  17. #define CLX_IOCTL
  18. #endif
  19. #ifndef CLX_FCNTL
  20. #define CLX_FCNTL
  21. #endif
  22. #if defined(CLX_IOCTL) && !defined(IRIX)
  23. #ifdef __linux
  24. #include <termios.h>
  25. #else
  26. #include <sgtty.h>
  27. #endif
  28. /*
  29. **  Mark a file close-on-exec so that it doesn't get shared with our
  30. **  children.  Ignore any error codes.
  31. */
  32. void
  33. closeOnExec(fd, flag)
  34. int     fd;
  35. int     flag;
  36. {
  37. int     oerrno;
  38. oerrno = errno;
  39. (void) ioctl(fd, flag ? FIOCLEX : FIONCLEX, (char *) NULL);
  40. errno = oerrno;
  41. }
  42. #endif /* defined(CLX_IOCTL) */
  43. #if defined(CLX_FCNTL)
  44. #include <fcntl.h>
  45. /*
  46. **  Mark a file close-on-exec so that it doesn't get shared with our
  47. **  children.  Ignore any error codes.
  48. */
  49. void
  50. CloseOnExec(fd, flag)
  51. int     fd;
  52. int     flag;
  53. {
  54. int     oerrno;
  55. oerrno = errno;
  56. (void) fcntl(fd, F_SETFD, flag ? 1 : 0);
  57. errno = oerrno;
  58. }
  59. #endif /* defined(CLX_FCNTL) */