⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clri.c

📁 早期freebsd实现
💻 C
字号:
/* * Copyright (c) 1990, 1993 *	The Regents of the University of California.  All rights reserved. * * This code is derived from software contributed to Berkeley by * Rich $alz of BBN Inc. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software *    must display the following acknowledgement: *	This product includes software developed by the University of *	California, Berkeley and its contributors. * 4. Neither the name of the University nor the names of its contributors *    may be used to endorse or promote products derived from this software *    without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */#ifndef lintstatic char copyright[] ="@(#) Copyright (c) 1990, 1993\n\	The Regents of the University of California.  All rights reserved.\n";#endif /* not lint */#ifndef lintstatic char sccsid[] = "@(#)clri.c	8.2 (Berkeley) 9/23/93";#endif /* not lint */#include <sys/param.h>#include <sys/time.h>#include <ufs/ufs/dinode.h>#include <ufs/ffs/fs.h>#include <err.h>#include <errno.h>#include <fcntl.h>#include <stdlib.h>#include <string.h>#include <stdio.h>#include <unistd.h>intmain(argc, argv)	int argc;	char *argv[];{	register struct fs *sbp;	register struct dinode *ip;	register int fd;	struct dinode ibuf[MAXBSIZE / sizeof (struct dinode)];	long generation, bsize;	off_t offset;	int inonum;	char *fs, sblock[SBSIZE];	if (argc < 3) {		(void)fprintf(stderr, "usage: clri filesystem inode ...\n");		exit(1);	}	fs = *++argv;	/* get the superblock. */	if ((fd = open(fs, O_RDWR, 0)) < 0)		err(1, "%s", fs);	if (lseek(fd, (off_t)(SBLOCK * DEV_BSIZE), SEEK_SET) < 0)		err(1, "%s", fs);	if (read(fd, sblock, sizeof(sblock)) != sizeof(sblock)) {		(void)fprintf(stderr,		    "clri: %s: can't read the superblock.\n", fs);		exit(1);	}	sbp = (struct fs *)sblock;	if (sbp->fs_magic != FS_MAGIC) {		(void)fprintf(stderr,		    "clri: %s: superblock magic number 0x%x, not 0x%x.\n",		    fs, sbp->fs_magic, FS_MAGIC);		exit(1);	}	bsize = sbp->fs_bsize;	/* remaining arguments are inode numbers. */	while (*++argv) {		/* get the inode number. */		if ((inonum = atoi(*argv)) <= 0) {			(void)fprintf(stderr,			    "clri: %s is not a valid inode number.\n", *argv);			exit(1);		}		(void)printf("clearing %d\n", inonum);		/* read in the appropriate block. */		offset = ino_to_fsba(sbp, inonum);	/* inode to fs blk */		offset = fsbtodb(sbp, offset);		/* fs blk disk blk */		offset *= DEV_BSIZE;			/* disk blk to bytes */		/* seek and read the block */		if (lseek(fd, offset, SEEK_SET) < 0)			err(1, "%s", fs);		if (read(fd, ibuf, bsize) != bsize)			err(1, "%s", fs);		/* get the inode within the block. */		ip = &ibuf[ino_to_fsbo(sbp, inonum)];		/* clear the inode, and bump the generation count. */		generation = ip->di_gen + 1;		memset(ip, 0, sizeof(*ip));		ip->di_gen = generation;		/* backup and write the block */		if (lseek(fd, (off_t)-bsize, SEEK_CUR) < 0)			err(1, "%s", fs);		if (write(fd, ibuf, bsize) != bsize)			err(1, "%s", fs);		(void)fsync(fd);	}	(void)close(fd);	exit(0);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -