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

📄 cdda.c

📁 使用libscsi做的一系列cdrom操作工具程序。包含cdwrite,cdflush,cdda三个程序
💻 C
字号:
#include <scsi/all.h>#include <stdio.h>#include <stdlib.h>#include <errno.h>#include "cdda.h"#define USAGE	"usage: %s [-chvV] [-b blocks] [-m mode] dev file start [end]\n"#define OPTS	"b:chm:vV"#define HELP	USAGE "\%s\n\n\  -b: number of blocks read at once\n\  -h: display this help message and exit\n\  -m: specify mode to use\n\  -v: verbose\n\  -V: display version and exit\n\\n\start and end time syntax: track[/index] or [track/]mm:ss[:ff]\n\  end time defaults to end of track\n"char *modes[] = {    "",    "toshiba",    "hp",    "yamaha",    NULL};char *prg;extern char version[];extern int opterr, optind;extern char *optarg;int main(int argc, char **argv){    int nblocks = 25, verbose = 0, checkonly = 0;    char *device, *file, *st, *en;    enum mode mode = m_unspec;    SCSI *fd;    FILE *fout;    u_long start, end;    int err, c, i;    struct sc_inquiry inq;    prg = argv[0];    /* process command line args */    opterr = 0;    while ((c = getopt(argc, argv, OPTS)) != EOF)	switch (c) {	case 'v':	    verbose = 1;	    break;	case 'c':	    checkonly = 1;	    break;	case 'b':	    nblocks = atoi(optarg);	    break;	case 'm':	    for (i=0; modes[i]; i++)		if (!strcmp(modes[i], optarg)) {		    mode = i;		    break;		}	    if (mode == m_unspec) {		fprintf(stderr, "%s: unknown mode %s\n",			prg, optarg);		exit(1);	    }	    break;	case 'V':	    printf("%s", version);	    exit(0);	case 'h':	    printf(HELP, prg, version);	    exit(0);	case '?':	    fprintf(stderr, USAGE, prg);	    exit(1);	}    if (optind != argc-3 && optind != argc-4) {	fprintf(stderr, USAGE, prg);	exit(1);    }    device = argv[optind];    file = argv[optind+1];    st = argv[optind+2];    en = (optind == argc-4 ? argv[optind+3] : NULL);    /* open device */    if ((fd=sc_open(device)) == NULL) {	fprintf(stderr, "%s: can't open device `%s': %s\n",		prg, device, strerror(errno));	exit(1);    }    /* translate start and end time */    if ((start=translate(fd, st)) < 0	|| (end=translate(fd, en)) < 0) {	sc_close(fd);	exit(1);    }    /* figure out mode to use */    if (mode == m_unspec) {	if (sc_inquiry(fd, &inq) < 0) {	    sc_fstatus(fd, stderr, prg, "inquiry", 3);	    sc_close(fd);	    exit(1);	}	if (!strcmp(inq.vendor, "TOSHIBA"))	    mode = m_toshiba;	else if (!strcmp(inq.vendor, "HP"))	    mode = m_hp;	else if (!strcmp(inq.vendor, "YAMAHA"))	    mode = m_yamaha;	else {	    fprintf(stderr, "%s: unrecognized cdrom (%s, %s)\n",		    prg, inq.vendor, inq.product);	    sc_close(fd);	    exit(1);	}    }    /* verbose and check-only */    if (verbose || checkonly) {	printf("using mode `%s', copying lba 0x%lx -- 0x%lx\n",	       modes[mode], start, end);	if (checkonly)	    exit(0);    }        /* open file */    if ((fout=fopen(file, "w")) == NULL) {	fprintf(stderr, "%s: can'to open file `%s': %s\n",		prg, file, strerror(errno));	sc_close(fd);	exit(1);    }    /* copy data */    err = do_read(mode, fd, fout, start, end, nblocks);    /* cleanup and exit */    sc_close(fd);    fclose(fout);    exit(err ? 1 : 0);}	    

⌨️ 快捷键说明

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