t_pathconf.c
上传用户:xu_441
上传日期:2007-01-04
资源大小:1640k
文件大小:2k
- /*
- ** The following test program tries the pathconf(2) routine. It should
- ** be run in a non-NFS-mounted directory (e.g., /tmp) and on remote (NFS)
- ** mounted directories running both NFS-v2 and NFS-v3 from systems that
- ** both do and do not permit file giveaway.
- */
- #include <sys/types.h>
- #include <errno.h>
- #include <fcntl.h>
- #include <stdio.h>
- #include <unistd.h>
- #ifdef EX_OK
- # undef EX_OK /* unistd.h may have another use for this */
- #endif /* EX_OK */
- #include <sysexits.h>
- #ifndef lint
- static char id[] = "@(#)$Id: t_pathconf.c,v 8.5 1999/08/28 00:25:28 gshapiro Exp $";
- #endif /* ! lint */
- int
- main(argc, argv)
- int argc;
- char **argv;
- {
- int fd;
- int i;
- char tbuf[100];
- extern int errno;
- if (geteuid() == 0)
- {
- printf("*** Run me as a non-root user! ***n");
- exit(EX_USAGE);
- }
- strcpy(tbuf, "TXXXXXX");
- fd = mkstemp(tbuf);
- if (fd < 0)
- {
- printf("*** Could not create test file %sn", tbuf);
- exit(EX_CANTCREAT);
- }
- errno = 0;
- i = pathconf(".", _PC_CHOWN_RESTRICTED);
- printf("pathconf(.) returns %2d, errno = %dn", i, errno);
- errno = 0;
- i = pathconf(tbuf, _PC_CHOWN_RESTRICTED);
- printf("pathconf(%s) returns %2d, errno = %dn", tbuf, i, errno);
- errno = 0;
- i = fpathconf(fd, _PC_CHOWN_RESTRICTED);
- printf("fpathconf(%s) returns %2d, errno = %dn", tbuf, i, errno);
- if (errno == 0 && i >= 0)
- {
- /* so it claims that it doesn't work -- try anyhow */
- printf(" fpathconf claims that chown is safe ");
- if (fchown(fd, 1, 1) >= 0)
- printf("*** but fchown works anyhow! ***n");
- else
- printf("and fchown agreesn");
- }
- else
- {
- /* well, let's see what really happens */
- printf(" fpathconf claims that chown is not safe ");
- if (fchown(fd, 1, 1) >= 0)
- printf("as indeed it is notn");
- else
- printf("*** but in fact it is safe ***n");
- }
- (void) unlink(tbuf);
- exit(EX_OK);
- }