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

📄 disks.c

📁 早期freebsd实现
💻 C
字号:
/*- * Copyright (c) 1980, 1992, 1993 *	The Regents of the University of California.  All rights reserved. * * 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 sccsid[] = "@(#)disks.c	8.1 (Berkeley) 6/6/93";#endif /* not lint */#include <sys/types.h>#include <sys/buf.h>#include <nlist.h>#include <ctype.h>#include <paths.h>#include <string.h>#include <stdlib.h>#include "systat.h"#include "extern.h"static void dkselect __P((char *, int, int []));static int read_names __P((void));static struct nlist namelist[] = {#define	X_DK_NDRIVE	0	{ "_dk_ndrive" },#define	X_DK_WPMS	1	{ "_dk_wpms" },#ifdef vax#define	X_MBDINIT	(X_DK_WPMS+1)	{ "_mbdinit" },#define	X_UBDINIT	(X_DK_WPMS+2)	{ "_ubdinit" },#endif#ifdef sun#define	X_MBDINIT	(X_DK_WPMS+1)	{ "_mbdinit" },#endif#ifdef tahoe#define	X_VBDINIT	(X_DK_WPMS+1)	{ "_vbdinit" },#endif#if defined(hp300) || defined(luna68k)#define X_HPDINIT       (X_DK_WPMS+1)        { "_hp_dinit" }, #endif#ifdef mips#define X_SCSI_DINIT	(X_DK_WPMS+1)	{ "_scsi_dinit" },#endif	{ "" },};float *dk_mspw;int dk_ndrive, *dk_select;char **dr_name;#include "names.c"					/* XXX */intdkinit(){	register int i;	register char *cp;	static int once = 0;	static char buf[1024];	if (once)		return(1);	if (kvm_nlist(kd, namelist)) {		nlisterr(namelist);		return(0);	}	if (namelist[X_DK_NDRIVE].n_value == 0) {		error("dk_ndrive undefined in kernel");		return(0);	}	NREAD(X_DK_NDRIVE, &dk_ndrive, LONG);	if (dk_ndrive <= 0) {		error("dk_ndrive=%d according to %s", dk_ndrive, _PATH_UNIX);		return(0);	}	dk_mspw = (float *)calloc(dk_ndrive, sizeof (float));	{		long *wpms = (long *)calloc(dk_ndrive, sizeof(long));		KREAD(NPTR(X_DK_WPMS), wpms, dk_ndrive * sizeof (long));		for (i = 0; i < dk_ndrive; i++)			*(dk_mspw + i) = (*(wpms + i) == 0)? 0.0:			                 (float) 1.0 / *(wpms + i);		free(wpms);	}	dr_name = (char **)calloc(dk_ndrive, sizeof (char *));	dk_select = (int *)calloc(dk_ndrive, sizeof (int));	for (cp = buf, i = 0; i < dk_ndrive; i++) {		dr_name[i] = cp;		sprintf(dr_name[i], "dk%d", i);		cp += strlen(dr_name[i]) + 1;		if (dk_mspw[i] != 0.0)			dk_select[i] = 1;	}	if (!read_names()) {		free(dr_name);		free(dk_select);		free(dk_mspw);		return(0);	}	once = 1;	return(1);}intdkcmd(cmd, args)	char *cmd, *args;{	if (prefix(cmd, "display") || prefix(cmd, "add")) {		dkselect(args, 1, dk_select);		return (1);	}	if (prefix(cmd, "ignore") || prefix(cmd, "delete")) {		dkselect(args, 0, dk_select);		return (1);	}	if (prefix(cmd, "drives")) {		register int i;		move(CMDLINE, 0); clrtoeol();		for (i = 0; i < dk_ndrive; i++)			if (dk_mspw[i] != 0.0)				printw("%s ", dr_name[i]);		return (1);	}	return (0);}static voiddkselect(args, truefalse, selections)	char *args;	int truefalse, selections[];{	register char *cp;	register int i;	char *index();	cp = index(args, '\n');	if (cp)		*cp = '\0';	for (;;) {		for (cp = args; *cp && isspace(*cp); cp++)			;		args = cp;		for (; *cp && !isspace(*cp); cp++)			;		if (*cp)			*cp++ = '\0';		if (cp - args == 0)			break;		for (i = 0; i < dk_ndrive; i++)			if (strcmp(args, dr_name[i]) == 0) {				if (dk_mspw[i] != 0.0)					selections[i] = truefalse;				else					error("%s: drive not configured",					    dr_name[i]);				break;			}		if (i >= dk_ndrive)			error("%s: unknown drive", args);		args = cp;	}}

⌨️ 快捷键说明

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