亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? stinit.c

?? mt 是linux下得磁帶機
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* This program initializes Linux SCSI tape drives using the   inquiry data from the devices and a text database.   Copyright 1996-2005 by Kai M鋕isara (email Kai.Makisara@kolumbus.fi)   Distribution of this program is allowed according to the   GNU Public Licence.   Last modified: Sun Aug 21 21:47:51 2005 by kai.makisara*/#include <stdio.h>#include <stdlib.h>#include <string.h>#include <ctype.h>#include <unistd.h>#include <errno.h>#include <fcntl.h>#include <dirent.h>#include <sys/stat.h>#include <sys/ioctl.h>#include <sys/sysmacros.h>#include <linux/major.h>#include <scsi/sg.h>#include "mtio.h"#ifndef FALSE#define TRUE 1#define FALSE 0#endif#define SKIP_WHITE(p) for ( ; *p == ' ' || *p == '\t'; p++)#define VERSION "0.9b"typedef struct _modepar_tr {    int defined;    int blocksize;    int density;    int buffer_writes;    int async_writes;    int read_ahead;    int two_fm;    int compression;    int auto_lock;    int fast_eod;    int can_bsr;    int no_blklimits;    int can_partitions;    int scsi2logical;    int sysv;    int defs_for_writes;} modepar_tr;typedef struct _devdef_tr {    int do_rewind;    int drive_buffering;    int timeout;    int long_timeout;    int cleaning;    int nowait;    modepar_tr modedefs[4];} devdef_tr;#define DEFMAX 2048#define LINEMAX 256#define MAX_TAPES 32#define NBR_MODES 4static int verbose = 0;/* The device directories being searched */typedef struct {    char dir[PATH_MAX];    int selective_scan;} devdir;static devdir devdirs[] = { {"/dev/scsi", 0}, {"/dev", 1}, {"", 0}};#define DEVFS_PATH    "/dev/tapes"#define DEVFS_TAPEFMT DEVFS_PATH "/tape%d"/* The partial names of the tape devices being included in the   search in selective scan */static char *tape_name_bases[] = {    "st", "nst", "rmt", "nrmt", "tape", NULL};/* The list of standard definition files being searched */static char *std_databases[] = {    "/etc/stinit.def",    NULL};	static FILE *open_database(char *base){    int i;    FILE *f;    if (base != NULL) {	if ((f = fopen(base, "r")) == NULL)	    fprintf(stderr, "stinit: Can't find SCSI tape database '%s'.\n",		    base);	return f;    }    for (i=0; std_databases[i] != NULL; i++) {	if (verbose > 1)	    fprintf(stderr, "Trying to open database '%s'.\n", std_databases[i]);	if ((f = fopen(std_databases[i], "r")) != NULL) {	    if (verbose > 1)		fprintf(stderr, "Open succeeded.\n");	    return f;	}    }    fprintf(stderr, "Can't find the tape characteristics database.\n");    return NULL;}	static char *find_string(char *s, char *target, char *buf, int buflen){    int have_arg;    char *cp, *cp2, c, *argp;    if (buf != NULL && buflen > 0)	*buf = '\0';    for ( ; *s != '\0'; ) {	SKIP_WHITE(s);	if (isalpha(*s)) {	    for (cp=s ; isalnum(*cp) || *cp == '-'; cp++)		;	    cp2 = cp;	    SKIP_WHITE(cp);	    if (*cp == '=') {		cp++;		SKIP_WHITE(cp);		if (*cp == '"') {		    cp++;		    for (cp2=cp; *cp2 != '"' && *cp2 != '\0'; cp2++)			;		}		else		    for (cp2=cp+1; isalnum(*cp2) || *cp2 == '-'; cp2++)			;		if (cp2 == '\0')		    return NULL;		have_arg = TRUE;		argp = cp;	    }	    else {		have_arg = FALSE;		argp = "1";	    }	    if (!strncmp(target, s, strlen(target))) {		c = *cp2;		*cp2 = '\0';		if (buf == NULL)		    buf = strdup(argp);		else {		    if (strlen(argp) < buflen)			strcpy(buf, argp);		    else {			strncpy(buf, argp, buflen);			buf[buflen - 1] = '\0';		    }		}		if (have_arg && c == '"')		    cp2++;		else		    *cp2 = c;		if (*cp2 != '\0')		    memmove(s, cp2, strlen(cp2) + 1);		else		    *s = '\0';		return buf;	    }	    s = cp2;	}	else	    for ( ; *s != '\0' && *s != ' ' && *s != '\t'; s++)		;    }    return NULL;}	static intnum_arg(char *t){    int nbr;    char *tt;    nbr = strtol(t, &tt, 0);    if (t != tt) {	if (*tt == 'k')	    nbr *= 1024;	else if (*tt == 'M')	    nbr *= 1024 * 1024;    }    return nbr;}	static intnext_block(FILE *dbf, char *buf, int buflen, int limiter){    int len;    char *cp, *bp;    static char lbuf[LINEMAX];    if (limiter == 0) {  /* Restart */	rewind(dbf);	lbuf[0] = '\0';	return TRUE;    }    for (len = 0 ; ; ) {	bp = buf + len;	if ((cp = strchr(lbuf, limiter)) != NULL) {	    *cp = '\0';	    strcpy(bp, lbuf);	    cp++;	    SKIP_WHITE(cp);	    memmove(lbuf, cp, strlen(cp) + 1);	    return TRUE;	}	if (len + strlen(lbuf) >= DEFMAX) {	    fprintf(stderr, "Too long definition: '%s'\n", buf);	    return FALSE;	}	cp = lbuf;	SKIP_WHITE(cp);	strcpy(bp, cp);	strcat(bp, " ");	len += strlen(cp) + 1;	if (fgets(lbuf, LINEMAX, dbf) == NULL)	    return FALSE;	if ((cp = strchr(lbuf, '#')) != NULL)	    *cp = '\0';	else	    lbuf[strlen(lbuf) - 1] = '\0';    }}	static intfind_pars(FILE *dbf, char *company, char *product, char *rev, devdef_tr *defs,	  int parse_only){    int i, mode, modes_defined, errors;    char line[LINEMAX], defstr[DEFMAX], comdef[DEFMAX];    char tmpcomp[LINEMAX], tmpprod[LINEMAX], tmprev[LINEMAX], *cp, c, *t;    char *nextdef, *curdef, *comptr;    static int call_nbr = 0;    call_nbr++;    defs->drive_buffering = (-1);    defs->timeout = (-1);    defs->long_timeout = (-1);    defs->cleaning = (-1);    defs->nowait = (-1);    for (i=0; i < NBR_MODES; i++) {	defs->modedefs[i].defined = FALSE;	defs->modedefs[i].blocksize = (-1);	defs->modedefs[i].density = (-1);	defs->modedefs[i].buffer_writes = (-1);	defs->modedefs[i].async_writes = (-1);	defs->modedefs[i].read_ahead = (-1);	defs->modedefs[i].two_fm = (-1);	defs->modedefs[i].compression = (-1);	defs->modedefs[i].auto_lock = (-1);	defs->modedefs[i].fast_eod = (-1);	defs->modedefs[i].can_bsr = (-1);	defs->modedefs[i].no_blklimits = (-1);	defs->modedefs[i].can_partitions = (-1);	defs->modedefs[i].scsi2logical = (-1);	defs->modedefs[i].sysv = (-1);	defs->modedefs[i].defs_for_writes = (-1);    }    next_block(dbf, NULL, 0, 0);    /* Find matching inquiry block */    for (errors=0 ; ; ) {	if (!next_block(dbf, defstr, DEFMAX, '{'))	    break;	find_string(defstr, "manuf", tmpcomp, LINEMAX);	find_string(defstr, "model", tmpprod, LINEMAX);	find_string(defstr, "rev", tmprev, LINEMAX);	if (!next_block(dbf, defstr, DEFMAX, '}')) {	    fprintf(stderr,		    "End of definition block not found for ('%s', '%s', '%s').\n",		    tmpcomp, tmpprod, tmprev);	    return FALSE;	}	if (!parse_only) {	    if (tmpcomp[0] != '\0' &&		strncmp(company, tmpcomp, strlen(tmpcomp)))		continue;	    if (tmpprod[0] != '\0' &&		strncmp(product, tmpprod, strlen(tmpprod)))		continue;	    if (tmprev[0] != '\0' &&		strncmp(rev, tmprev, strlen(tmprev)))		continue;	}	else if (verbose > 0)	    printf("\nParsing modes for ('%s', '%s', '%s').\n",		   tmpcomp, tmpprod, tmprev);	/* Block found, get the characteristics */	for (nextdef=defstr; *nextdef != '\0' &&		 (*nextdef != 'm' || strncmp(nextdef, "mode", 2)); nextdef++)	    ;	c = *nextdef;	*nextdef = '\0';	strcpy(comdef, defstr);	*nextdef = c;	comptr = comdef;	SKIP_WHITE(comptr);	for ( ; *nextdef != '\0'; ) {	    curdef = nextdef;	    SKIP_WHITE(curdef);	    for (nextdef++ ; *nextdef != '\0' &&		 (*nextdef != 'm' || strncmp(nextdef, "mode", 2)); nextdef++)		;	    c = *nextdef;	    *nextdef = '\0';	    mode = strtol(curdef + 4, &cp, 0) - 1;	    if (mode < 0 || mode >= NBR_MODES) {		fprintf(stderr,			"Illegal mode for ('%s', '%s', '%s'):\n'%s'\n",			tmpcomp, tmpprod, tmprev, curdef);		*nextdef = c;		errors++;		continue;	    }	    strcpy(defstr, comptr);	    strcat(defstr, cp);	    *nextdef = c;	    if (verbose > 1)		fprintf(stderr, "Mode %d definition: %s\n", mode + 1, defstr);	    if ((t = find_string(defstr, "disab", line, LINEMAX)) != NULL &&		strtol(t, NULL, 0) != 0) {		defs->modedefs[mode].defined = FALSE;		continue;	    }	    if ((t = find_string(defstr, "drive-", line, LINEMAX)) != NULL)		defs->drive_buffering = num_arg(t);	    if ((t = find_string(defstr, "timeout", line, LINEMAX)) != NULL)		defs->timeout = num_arg(t);	    if ((t = find_string(defstr, "long-time", line, LINEMAX)) != NULL)		defs->long_timeout = num_arg(t);	    if ((t = find_string(defstr, "clean", line, LINEMAX)) != NULL)		defs->cleaning = num_arg(t);	    if ((t = find_string(defstr, "no-w", line, LINEMAX)) != NULL)		defs->nowait = num_arg(t);	    defs->modedefs[mode].defined = TRUE;	    if ((t = find_string(defstr, "block", line, LINEMAX)) != NULL)		defs->modedefs[mode].blocksize = num_arg(t);	    if ((t = find_string(defstr, "dens", line, LINEMAX)) != NULL)		defs->modedefs[mode].density = num_arg(t);	    if ((t = find_string(defstr, "buff", line, LINEMAX)) != NULL)		defs->modedefs[mode].buffer_writes = num_arg(t);	    if ((t = find_string(defstr, "async", line, LINEMAX)) != NULL)		defs->modedefs[mode].async_writes = num_arg(t);	    if ((t = find_string(defstr, "read", line, LINEMAX)) != NULL)		defs->modedefs[mode].read_ahead = num_arg(t);	    if ((t = find_string(defstr, "two", line, LINEMAX)) != NULL)		defs->modedefs[mode].two_fm = num_arg(t);	    if ((t = find_string(defstr, "comp", line, LINEMAX)) != NULL)		defs->modedefs[mode].compression = num_arg(t);	    if ((t = find_string(defstr, "auto", line, LINEMAX)) != NULL)		defs->modedefs[mode].auto_lock = num_arg(t);	    if ((t = find_string(defstr, "fast", line, LINEMAX)) != NULL)		defs->modedefs[mode].fast_eod = num_arg(t);	    if ((t = find_string(defstr, "can-b", line, LINEMAX)) != NULL)		defs->modedefs[mode].can_bsr = num_arg(t);	    if ((t = find_string(defstr, "noblk", line, LINEMAX)) != NULL)		defs->modedefs[mode].no_blklimits = num_arg(t);	    if ((t = find_string(defstr, "can-p", line, LINEMAX)) != NULL)		defs->modedefs[mode].can_partitions = num_arg(t);	    if ((t = find_string(defstr, "scsi2", line, LINEMAX)) != NULL)		defs->modedefs[mode].scsi2logical = num_arg(t);	    if ((t = find_string(defstr, "sysv", line, LINEMAX)) != NULL)		defs->modedefs[mode].sysv = num_arg(t);	    if ((t = find_string(defstr, "defs-for-w", line, LINEMAX)) != NULL)		defs->modedefs[mode].defs_for_writes = num_arg(t);	    for (t=defstr; *t == ' ' || *t == '\t'; t++)		;	    if (*t != '\0' && call_nbr <= 1) {		fprintf(stderr,			"Warning: errors in definition for ('%s', '%s', '%s'):\n%s\n",			tmpcomp, tmpprod, tmprev, defstr);		errors++;	    }	}    }    if (parse_only) {	if (verbose > 0)	    printf("\n");	printf("Definition parse completed. ");	if (errors) {	    printf("Errors found!\n");	    return FALSE;	}	else {	    printf("No errors found.\n");	    return TRUE;	}    }    else {	for (i=modes_defined=0; i < NBR_MODES; i++)	    if (defs->modedefs[i].defined)		modes_defined++;	if (modes_defined == 0) {	    fprintf(stderr,		    "Warning: No modes in definition for ('%s', '%s', '%s').\n",		    tmpcomp, tmpprod, tmprev);	    errors++;	}    }    if (modes_defined)	return TRUE;    return FALSE;}static int sg_io_errcheck(struct sg_io_hdr *hdp){    int status;    status = hdp->status & 0x7e;    if ((hdp->status & 0x7e) == 0 || hdp->host_status == 0 ||	hdp->driver_status == 0)	return 0;    return EIO;}#define INQUIRY 0x12#define INQUIRY_CMDLEN  6#define SENSE_BUFF_LEN 32#define DEF_TIMEOUT 60000#ifndef SCSI_IOCTL_SEND_COMMAND#define SCSI_IOCTL_SEND_COMMAND 1#endif#define IOCTL_HEADER_LENGTH 8	static intdo_inquiry(char *tname, char *company, char *product, char *rev, int print_non_found){    int fn;    int result, *ip, i;#define BUFLEN 256    unsigned char buffer[BUFLEN], *cmd, *inqptr;    struct sg_io_hdr io_hdr;    unsigned char inqCmdBlk[INQUIRY_CMDLEN] = {INQUIRY, 0, 0, 0, 200, 0};    unsigned char sense_b[SENSE_BUFF_LEN];    if ((fn = open(tname, O_RDONLY | O_NONBLOCK)) < 0) {	if (print_non_found || verbose > 0) {	    if (errno == ENXIO)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲啪啪综合av一区二区三区| 粉嫩欧美一区二区三区高清影视 | 91黄色免费看| 欧美乱妇15p| 久久综合久久鬼色| 亚洲高清中文字幕| 国产精一区二区三区| 在线观看av一区| 欧美精品日韩精品| 国产亚洲精品aa| 天天影视网天天综合色在线播放 | 99免费精品视频| 在线观看日韩国产| 精品粉嫩超白一线天av| 亚洲欧洲国产日本综合| 日本中文字幕不卡| av不卡在线播放| 欧美日韩另类国产亚洲欧美一级| 亚洲精品在线电影| 亚洲国产毛片aaaaa无费看 | 久久成人免费日本黄色| 91在线免费播放| 91麻豆精品国产91久久久久| 综合欧美一区二区三区| 蜜桃一区二区三区在线| 91小宝寻花一区二区三区| 欧美mv日韩mv国产网站| 亚洲午夜视频在线观看| 国产高清不卡一区| 在线不卡中文字幕| 亚洲国产成人午夜在线一区| 免费精品99久久国产综合精品| 国产一区二区三区美女| 91精品欧美综合在线观看最新| 9久草视频在线视频精品| 欧美v日韩v国产v| 亚洲国产aⅴ天堂久久| 成人av网在线| 成人小视频在线观看| 日韩女优av电影在线观看| 国产精品国产三级国产普通话蜜臀| 日韩国产精品91| 色天使久久综合网天天| 久久先锋资源网| 亚洲成a人v欧美综合天堂| 欧美三片在线视频观看 | 亚洲精品久久7777| 91亚洲精品久久久蜜桃| 国产精品五月天| 丁香啪啪综合成人亚洲小说| 日韩三级免费观看| 亚洲一二三四在线观看| fc2成人免费人成在线观看播放| 精品盗摄一区二区三区| 蜜桃久久久久久| 欧美一激情一区二区三区| 人人爽香蕉精品| 日韩精品一区二区三区视频播放| 亚洲国产精品一区二区久久恐怖片| 91国偷自产一区二区使用方法| 亚洲同性gay激情无套| 色噜噜狠狠成人中文综合| 亚洲日本中文字幕区| 99re免费视频精品全部| 亚洲欧美成aⅴ人在线观看| 风间由美一区二区av101| 国产精品色哟哟| a4yy欧美一区二区三区| 国产精品久久久久久久第一福利 | 亚洲国产综合色| 91福利国产精品| 午夜亚洲国产au精品一区二区| 欧美酷刑日本凌虐凌虐| 久久99久国产精品黄毛片色诱| 日韩一区二区三区四区| 久久97超碰国产精品超碰| 26uuu精品一区二区三区四区在线| 国产成人免费视频网站| 亚洲美女免费视频| 欧美日本免费一区二区三区| 美国一区二区三区在线播放| 久久精品一区二区三区不卡| 91在线观看地址| 奇米综合一区二区三区精品视频| 久久久久久久性| 欧美中文字幕一区二区三区亚洲| 视频一区二区不卡| 日韩精品一区二区三区在线观看| 不卡一区中文字幕| 青草国产精品久久久久久| 欧美国产在线观看| 色偷偷成人一区二区三区91| 免费在线观看精品| 亚洲欧洲国产专区| 在线亚洲+欧美+日本专区| 日本一区中文字幕| 国产精品天干天干在线综合| 色婷婷激情一区二区三区| 国产在线麻豆精品观看| 欧美国产日韩a欧美在线观看 | 婷婷激情综合网| 欧美韩国一区二区| 欧美高清hd18日本| heyzo一本久久综合| 久久99久久99精品免视看婷婷| 99久久伊人网影院| 亚洲大片免费看| 最新高清无码专区| 久久综合久久鬼色中文字| 亚洲mv在线观看| 欧美一级黄色大片| 色婷婷综合久久| 成人午夜av电影| 日本欧美加勒比视频| 夜夜亚洲天天久久| 国产精品麻豆一区二区| 欧美日韩国产一级片| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 亚洲另类在线一区| 国产女人18毛片水真多成人如厕| 欧美一区在线视频| 911国产精品| 日韩av成人高清| 午夜激情一区二区| 亚洲va国产天堂va久久en| 久久精品男人天堂av| 日韩一区二区在线观看视频播放| 9人人澡人人爽人人精品| 91麻豆精品视频| 99re热视频这里只精品| 9i在线看片成人免费| 99久久er热在这里只有精品66| 国产精品99久久久久久有的能看| 狠狠色丁香久久婷婷综合丁香| 日韩久久久久久| 欧美成人aa大片| 日韩欧美国产精品一区| 欧美一区二区三区四区高清| 欧美精品在线一区二区三区| 欧美日本一区二区在线观看| 91丨九色porny丨蝌蚪| 国产69精品久久久久毛片| 精久久久久久久久久久| 依依成人综合视频| 琪琪久久久久日韩精品| 欧美国产成人精品| 成人欧美一区二区三区| 中文字幕亚洲视频| 一区二区三区电影在线播| 亚洲国产精品嫩草影院| 日韩福利电影在线观看| 久久精品国内一区二区三区| 视频一区二区中文字幕| 日韩av高清在线观看| 蜜臀国产一区二区三区在线播放| 久久精品国产99国产| 国产激情视频一区二区三区欧美| 不卡的av网站| 蜜臀av性久久久久蜜臀av麻豆| 国产成人综合在线播放| 99久久免费视频.com| 欧美亚洲国产一卡| 欧美一卡在线观看| 国产欧美精品一区二区色综合朱莉| 欧美一区日韩一区| 久久久99久久精品欧美| 日本一区二区三区四区 | 国产乱码精品一区二区三区忘忧草 | 色综合久久久久综合体| 欧美日韩五月天| 91精品欧美一区二区三区综合在 | 一区二区三区在线高清| 亚洲国产精品一区二区www在线 | 色播五月激情综合网| 欧美成人vps| 亚洲精品中文在线影院| 美女诱惑一区二区| 91在线观看视频| 久久―日本道色综合久久| 伊人开心综合网| 国产精品888| 666欧美在线视频| 亚洲欧洲av一区二区三区久久| 日本网站在线观看一区二区三区| 91在线小视频| 成人免费的视频| 欧美大片一区二区| 亚洲人成在线播放网站岛国| 国产精品自拍av| 欧美高清视频一二三区 | 99久免费精品视频在线观看| 精品国产自在久精品国产| 亚洲视频在线一区二区| 精品综合久久久久久8888| 欧美视频一区在线| 久久精品视频免费| 麻豆久久久久久| 欧美亚洲综合网| 亚洲欧洲日韩在线| 国产a视频精品免费观看|