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

📄 read.c

📁 使用libscsi做的一系列cdrom操作工具程序。包含cdwrite,cdflush,cdda三个程序
💻 C
字号:
#include <scsi/da.h>#include <scsi/all.h>#include <scsi/taxm.h>#include <stdio.h>#include <stdlib.h>#include <errno.h>#include "cdda.h"struct {    struct sc_mode_header6 h;    struct sc_mode_block_descriptor b;    struct sc_mode_taxm_speed s;} mode_bdesc = {    { 0, 0, 0, 1 },    { 0x82, 0, 0, 0, 0, 0, 0x9, 0x30 },#if SC_BIGENDIAN    { 0, SC_MODE_TAXM_SPEED, 1, SC_TAXM_QUAD, SC_TAXM_QUAD }#else    { SC_MODE_TAXM_SPEED, 0, 1, SC_TAXM_QUAD, SC_TAXM_QUAD }#endif};intdo_read(enum mode mode, SCSI *fd, FILE *fout,	u_long start, u_long end, int nblocks){    char s[80];    u_char *buf;    u_long i, n;    u_long len = sizeof(struct sc_mode_header6)	+ sizeof(struct sc_mode_block_descriptor) + 3;	    if ((buf=(u_char *)sc_alloc(2352*nblocks)) == NULL) {	fprintf(stderr, "%s: malloc failure\n", prg);	return -1;    }    switch (mode) {    case m_hp:	mode_bdesc.b.dcode = 0;	len -= 3;	/* FALLTHROUGH */    case m_toshiba:	if (sc_mode_select6(fd, 1, 0,			    len, (u_char *)&mode_bdesc) < 0) {	    sc_fstatus(fd, stderr, prg, "mode-select6", 3);	    sc_free(buf);	    return -1;	}	break;    case m_yamaha:	break;	    default:	fprintf(stderr, "%s: unknown mode selected: %d\n",		prg, mode);	sc_free(buf);	return -1;    }    for (i=start; i<end; i+=n/2352) {	if (mode != m_yamaha) {	    if ((n=sc_da_read10(fd, i, (u_short)				((i+nblocks < end) ? nblocks : end-i),				2352*nblocks, buf)) < 0) {		sprintf(s, "read10(%0xlx)", i);		sc_fstatus(fd, stderr, prg, s, 3);		sc_free(buf);		return -1;	    }	}	else {	    if ((n=sc_cdr102_read_cdda(fd, 0, i, (u_long)				((i+nblocks < end) ? nblocks : end-i),				2352*nblocks, buf)) < 0) {		sprintf(s, "read-cdda(%0xlx)", i);		sc_fstatus(fd, stderr, prg, s, 3);		sc_free(buf);		return -1;	    }	}	if (fwrite(buf, 1, n, fout) != n) {	    fprintf(stderr, "%s: write error: %s\n",		    prg, strerror(errno));	    sc_free(buf);	    return -1;	}    }    sc_free(buf);    return 0;}

⌨️ 快捷键说明

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