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

📄 setfdprm.c

📁 Util-linux 软件包包含许多工具。其中比较重要的是加载、卸载、格式化、分区和管理硬盘驱动器
💻 C
字号:
/* setfdprm.c  -  Sets user-provided floppy disk parameters, re-activates		  autodetection and switches diagnostic messages. *//* 1999-02-22 Arkadiusz Mi秌iewicz <misiek@pld.ORG.PL> * - added Native Language Support */#include <unistd.h>#include <stdlib.h>#include <stdio.h>#include <string.h>#include <fcntl.h>#include <sys/types.h>#include <sys/stat.h>#include <sys/ioctl.h>#include <linux/fd.h>#include "nls.h"#define FDPRMFILE "/etc/fdprm"#define MAXLINE   200static intconvert(char *arg) {    long result;    char *end;    result = strtol(arg,&end,0);    if (!*end)	    return (int) result;    fprintf(stderr,_("Invalid number: %s\n"),arg);    exit(1);}static voidcmd_without_param(int cmd,int fd) {    if (ioctl(fd,cmd,NULL) >= 0)	    exit(0);    perror("ioctl");    exit(1);}/* set given fd parameters */static voidset_params(int cmd,int fd,char **params) {    struct floppy_struct ft;    ft.size = convert(params[0]);    ft.sect = convert(params[1]);    ft.head = convert(params[2]);    ft.track = convert(params[3]);    ft.stretch = convert(params[4]);    ft.gap = convert(params[5]);    ft.rate = convert(params[6]);    ft.spec1 = convert(params[7]);    ft.fmt_gap = convert(params[8]);    ft.name = NULL;    if (ioctl(fd,cmd,&ft) >= 0) exit(0);    perror("ioctl");    exit(1);}/* find parameter set in file, and use it */static voidfind_params(int cmd,int fd,char *name) {    FILE *file;    char line[MAXLINE+2],this[MAXLINE+2],param[9][MAXLINE+2];    char *params[9],*start;    int count;    if ((file = fopen(FDPRMFILE,"r")) == NULL) {	perror(FDPRMFILE);	exit(1);    }    while (fgets(line,MAXLINE,file)) {	for (start = line; *start == ' ' || *start == '\t'; start++);	if (*start && *start != '\n' && *start != '#') {	    if (sscanf(start,"%s %s %s %s %s %s %s %s %s %s",this,param[0],	      param[1],param[2],param[3],param[4],param[5],param[6],param[7],	      param[8]) != 10) {		fprintf(stderr,_("Syntax error: '%s'\n"),line);		exit(1);	    }	    if (!strcmp(this,name)) {		for (count = 0; count < 9; count++)		    params[count] = param[count];		set_params(cmd,fd,params);	    }	}    }    fprintf(stderr,_("No such parameter set: '%s'\n"),name);    exit(1);}static voidusage(char *name) {    char *this;    if ((this = strrchr(name,'/')) != NULL) name = this+1;    fprintf(stderr,_("usage:\n"));    fprintf(stderr,_("   %s [ -p ] dev name\n"),name);    fprintf(stderr,_("   %s [ -p ] dev size sect heads tracks stretch "		     "gap rate spec1 fmt_gap\n"),name);#ifdef FDMEDCNG    fprintf(stderr,_("   %s [ -c | -y | -n | -d ] dev\n"),name);#else    fprintf(stderr,_("   %s [ -c | -y | -n ] dev\n"),name);#endif    exit(1);}intmain(int argc, char **argv) {    int fd;    unsigned int cmd;    char *progname, *p;    progname = argv[0];    if ((p = strrchr(progname, '/')) != NULL)	    progname = p+1;    setlocale(LC_ALL, "");    bindtextdomain(PACKAGE, LOCALEDIR);    textdomain(PACKAGE);    if (argc == 2 &&	(!strcmp(argv[1], "-V") || !strcmp(argv[1], "--version"))) {	    printf(_("%s from %s\n"), progname, util_linux_version);	    exit(0);    }    if (argc < 2)	    usage(progname);    cmd = FDSETPRM;    if (*argv[1] == '-') {	switch (argv[1][1]) {	    case 'c':		cmd = FDCLRPRM;		break;	    case 'p':		cmd = FDDEFPRM;		break;	    case 'y':		cmd = FDMSGON;		break;	    case 'n':		cmd = FDMSGOFF;		break;#ifdef FDMEDCNG	    case 'd':		cmd = FDMEDCNG;		break;#endif	    default:		usage(progname);	}	argc--;	argv++;    }    if ((fd = open(argv[1],3)) < 0) { /* O_WRONLY needed in a few kernels */	perror(argv[1]);	exit(1);    }    if (cmd != FDSETPRM && cmd != FDDEFPRM) {	if (argc != 2) usage(progname);	cmd_without_param(cmd,fd);    }    if (argc != 11 && argc != 3)	usage(progname);    else if (argc == 11)	set_params(cmd,fd,&argv[2]);    else	find_params(cmd,fd,argv[2]);    /* not reached */    return 0;}

⌨️ 快捷键说明

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