📄 cdtoc.c
字号:
#include <stdio.h>#include <stdlib.h>#include <errno.h>#include <scsi/all.h>#include <scsi/cd.h>char *prg;intmain(int argc, char **argv){ SCSI *fd; int i, len, msf = 1; struct sc_inquiry inq; struct sc_cd_toc *toc; prg = argv[0]; if (argc > 1) { if (!strcmp(argv[1], "-b")) { msf = 0; --argc; argv++; } else if (!strcmp(argv[1], "--")) { --argc; argv++; } else if (argv[1][0] == '-') { fprintf(stderr, "usage: %s [-b] device\n", prg); exit(1); } } if (argc != 2) { fprintf(stderr, "usage: %s [-b] device\n", prg); exit(1); } if ((fd=sc_open(argv[1])) == NULL) { fprintf(stderr, "%s: can't open device %s: %s\n", prg, argv[1], strerror(errno)); exit(1); } if (sc_inquiry(fd, &inq) < 0) { sc_fstatus(fd, stderr, prg, "inquiry", 3); sc_close(fd); exit(1); } if (inq.type != 5 && inq.type != 4) { fprintf(stderr, "%s: device %s is no cdrom (it's type %d)\n", prg, argv[1], inq.type); sc_close(fd); exit(1); } len = sizeof(struct sc_cd_toc) + 99*sizeof(struct sc_cd_toc_track); if ((toc=(struct sc_cd_toc *)malloc(len)) == NULL) { fprintf(stderr, "%s: malloc failure\n"); sc_close(fd); exit(1); } if (sc_cd_read_toc(fd, msf, 0, len, toc) < 0) { sc_fstatus(fd, stderr, prg, "cd-read-toc", 3); sc_close(fd); exit(1); } for (i=0; i<toc->notr; i++) { if (toc->track[i].number < 100) printf("%02d: ", toc->track[i].number); else printf("--: "); if (msf) printf("%02d:%02d:%02d", toc->track[i].addr>>16, (toc->track[i].addr>>8) & 0xff, toc->track[i].addr & 0xff); else printf("0x%08x", toc->track[i].addr); if (toc->track[i].number < 100) { if (toc->track[i].ctrl & 0x4) printf(" data"); else {#define bit(x, s) ((toc->track[i].ctrl & (x)) ? (s) : "") printf(" %saudio%s", bit(0x8, "4-channel "), bit(0x1, " with pre-emphasis")); } printf("%s\n", bit(0x2, " (no digital copy)")); } else printf(" leadout\n"); } sc_close(fd); exit(0);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -