📄 info.c
字号:
/* * 代码清单3: info.c */#include <unistd.h>#include <stdlib.h>#include <fcntl.h>#include <sys/ioctl.h>#include <linux/cdrom.h>/* CD驱动器对应的设备文件 */#define DEVICE "/dev/cdrom"int main() { int fd; int status; int track; struct cdrom_tochdr header; /* TOC头部 */ struct cdrom_tocentry entry; /* TOC条目 */ /* 打开设备 */ fd = open(DEVICE, O_RDONLY); if (fd < 0) { perror("unable to open " DEVICE); exit(1); } /* 计算音轨数目 */ status = ioctl(fd, CDROMREADTOCHDR, &header); if (status != 0) { perror("CDROMREADTOCHDR ioctl failed"); exit(1); } /* 输出CD中各条音轨的信息 */ for (track = 1; track <= header.cdth_trk1; track ++) { entry.cdte_track = track; entry.cdte_format = CDROM_MSF; /* 采用MSF格式地址 */ status = ioctl(fd, CDROMREADTOCENTRY, &entry); if (status != 0) { perror("CDROMREADTOCENTRY ioctl failed"); exit(1); } printf("Track%02d: %5d %02d:%02d.%03d %c \n", track, entry.cdte_track, entry.cdte_addr.msf.minute, entry.cdte_addr.msf.second, entry.cdte_addr.msf.frame, (entry.cdte_ctrl & CDROM_DATA_TRACK) ? 'D' : 'A'); } /* 输出起始(leadout)音轨的信息 */ entry.cdte_track = CDROM_LEADOUT; status = ioctl(fd, CDROMREADTOCENTRY, &entry); if (status != 0) { perror("CDROMREADTOCENTRY ioctl failed"); exit(1); } printf("Track leadout: %02d:%02d.%03d \n", entry.cdte_addr.msf.minute, entry.cdte_addr.msf.second, entry.cdte_addr.msf.frame); /* 关闭设备 */ status = close(fd); if (status != 0) { perror("unable to close " DEVICE); exit(1); } return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -