t_pathconf.c
上传用户:xu_441
上传日期:2007-01-04
资源大小:1640k
文件大小:2k
源码类别:

Email客户端

开发平台:

Unix_Linux

  1. /*
  2. **  The following test program tries the pathconf(2) routine.  It should
  3. **  be run in a non-NFS-mounted directory (e.g., /tmp) and on remote (NFS)
  4. **  mounted directories running both NFS-v2 and NFS-v3 from systems that
  5. **  both do and do not permit file giveaway.
  6. */
  7. #include <sys/types.h>
  8. #include <errno.h>
  9. #include <fcntl.h>
  10. #include <stdio.h>
  11. #include <unistd.h>
  12. #ifdef EX_OK
  13. # undef EX_OK /* unistd.h may have another use for this */
  14. #endif /* EX_OK */
  15. #include <sysexits.h>
  16. #ifndef lint
  17. static char id[] = "@(#)$Id: t_pathconf.c,v 8.5 1999/08/28 00:25:28 gshapiro Exp $";
  18. #endif /* ! lint */
  19. int
  20. main(argc, argv)
  21. int argc;
  22. char **argv;
  23. {
  24. int fd;
  25. int i;
  26. char tbuf[100];
  27. extern int errno;
  28. if (geteuid() == 0)
  29. {
  30. printf("*** Run me as a non-root user! ***n");
  31. exit(EX_USAGE);
  32. }
  33. strcpy(tbuf, "TXXXXXX");
  34. fd = mkstemp(tbuf);
  35. if (fd < 0)
  36. {
  37. printf("*** Could not create test file %sn", tbuf);
  38. exit(EX_CANTCREAT);
  39. }
  40. errno = 0;
  41. i = pathconf(".", _PC_CHOWN_RESTRICTED);
  42. printf("pathconf(.) returns %2d, errno = %dn", i, errno);
  43. errno = 0;
  44. i = pathconf(tbuf, _PC_CHOWN_RESTRICTED);
  45. printf("pathconf(%s) returns %2d, errno = %dn", tbuf, i, errno);
  46. errno = 0;
  47. i = fpathconf(fd, _PC_CHOWN_RESTRICTED);
  48. printf("fpathconf(%s) returns %2d, errno = %dn", tbuf, i, errno);
  49. if (errno == 0 && i >= 0)
  50. {
  51. /* so it claims that it doesn't work -- try anyhow */
  52. printf("  fpathconf claims that chown is safe ");
  53. if (fchown(fd, 1, 1) >= 0)
  54. printf("*** but fchown works anyhow! ***n");
  55. else
  56. printf("and fchown agreesn");
  57. }
  58. else
  59. {
  60. /* well, let's see what really happens */
  61. printf("  fpathconf claims that chown is not safe ");
  62. if (fchown(fd, 1, 1) >= 0)
  63. printf("as indeed it is notn");
  64. else
  65. printf("*** but in fact it is safe ***n");
  66. }
  67. (void) unlink(tbuf);
  68. exit(EX_OK);
  69. }