quotaon.c
来自「<B>Digital的Unix操作系统VAX 4.2源码</B>」· C语言 代码 · 共 183 行
C
183 行
#ifndef lintstatic char *sccsid = "@(#)quotaon.c 4.1 (ULTRIX) 7/2/90";#endif/************************************************************************ * * * Copyright (c) 1986 by * * Digital Equipment Corporation, Maynard, MA * * All rights reserved. * * * * This software is furnished under a license and may be used and * * copied only in accordance with the terms of such license and * * with the inclusion of the above copyright notice. This * * software or any other copies thereof may not be provided or * * otherwise made available to any other person. No title to and * * ownership of the software is hereby transferred. * * * * This software is derived from software received from the * * University of California, Berkeley, and from Bell * * Laboratories. Use, duplication, or disclosure is subject to * * restrictions under license agreements with University of * * California and with AT&T. * * * * The information in this software is subject to change without * * notice and should not be construed as a commitment by Digital * * Equipment Corporation. * * * * Digital assumes no responsibility for the use or reliability * * of its software on equipment which is not supplied by Digital. * * * ************************************************************************//* * Turn quota on/off for a filesystem. */#include <sys/param.h>#include <sys/file.h>#include <sys/mount.h>#include <stdio.h>#include <fstab.h>struct fs_data *mountbuffer;#define MSIZE sizeof(struct fs_data) * NMOUNTint vflag; /* verbose */int aflag; /* all file systems */int done;int ret;char *qfname = "quotas";char quotafile[MAXPATHLEN + 1];char *index(), *rindex();main(argc, argv) int argc; char **argv;{ register struct fstab *fs; char *whoami, *rindex(); int offmode = 0, errs = 0, i; int loc; char *malloc(); whoami = rindex(*argv, '/') + 1; if (whoami == (char *)1) whoami = *argv; if (strcmp(whoami, "quotaoff") == 0) offmode++; else if (strcmp(whoami, "quotaon") != 0) { fprintf(stderr, "Name must be quotaon or quotaoff not %s\n", whoami); exit(1); }again: argc--, argv++; if (argc > 0 && strcmp(*argv, "-v") == 0) { vflag++; goto again; } if (argc > 0 && strcmp(*argv, "-a") == 0) { aflag++; goto again; } if (argc <= 0 && !aflag) { fprintf(stderr, "Usage:\n\t%s [-v] -a\n\t%s [-v] filesys ...\n", whoami, whoami); exit(1); } if((mountbuffer = (struct fs_data *)malloc(MSIZE)) == NULL) { perror("malloc"); exit(1); } /* use this so that we don't hang if server's down with nfs file sys */ ret = getmountent(&loc, mountbuffer, NMOUNT); if (ret == 0) { perror("getmountent"); exit(2); } setfsent(); while ((fs = getfsent()) != NULL) { if (aflag && (fs->fs_type == 0 || strcmp(fs->fs_type, "rq") != 0)) continue; if (!aflag && !(oneof(fs->fs_file, argv, argc) || oneof(fs->fs_spec, argv, argc))) continue; errs += quotaonoff(fs, offmode); } endfsent(); for (i = 0; i < argc; i++) if ((done & (1 << i)) == 0) fprintf(stderr, "%s not found in /etc/fstab\n", argv[i]); exit(errs);}quotaonoff(fs, offmode) register struct fstab *fs; int offmode;{ if (strcmp(fs->fs_file, "/") && readonly(fs)) return (1); if (offmode) { if (setquota(fs->fs_spec, NULL) < 0) goto bad; if (vflag) printf("%s: quotas turned off\n", fs->fs_file); return (0); } (void) sprintf(quotafile, "%s/%s", fs->fs_file, qfname); if (setquota(fs->fs_spec, quotafile) < 0) goto bad; if (vflag) printf("%s: quotas turned on\n", fs->fs_file); return (0);bad: fprintf(stderr, "setquota: "); perror(fs->fs_spec); return (1);}oneof(target, list, n) char *target, *list[]; register int n;{ register int i; for (i = 0; i < n; i++) if (strcmp(target, list[i]) == 0) { done |= 1 << i; return (1); } return (0);}/* * Verify file system is mounted and not readonly. */readonly(fs) register struct fstab *fs;{ register struct fs_data *fs_data; register char *cp; cp = index(fs->fs_spec, '\0'); while (*--cp == '/') *cp = '\0'; cp = fs->fs_spec; for (fs_data = mountbuffer; fs_data < &mountbuffer[ret]; fs_data++) { if (strcmp(cp, fs_data->fd_devname) == 0) { if ((fs_data->fd_flags & M_RONLY) != 0) { printf("%s: mounted read-only\n", fs->fs_file); return (1); } return (0); } } printf("%s: not mounted\n", fs->fs_file); return (1);}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?