📄 subchnl.c
字号:
/* * subchnl.c * Example program to display audio CD subchannel data */#include <unistd.h>#include <stdlib.h>#include <stdio.h>#include <sys/ioctl.h>#include <fcntl.h>#include <linux/cdrom.h>/* return audio status as a string */char *audiostatus(int status){ switch (status) { case CDROM_AUDIO_INVALID: return "Invalid"; case CDROM_AUDIO_PLAY: return "Playing"; case CDROM_AUDIO_PAUSED: return "Paused"; case CDROM_AUDIO_COMPLETED: return "Completed"; case CDROM_AUDIO_ERROR: return "Error"; case CDROM_AUDIO_NO_STATUS: return "Stopped"; default: return "Unknown"; }}int main(){ const char *device = "/dev/cdrom"; /* CD-ROM device file name */ int fd; /* CD-ROM file descriptor */ int status; /* hold status of system calls */ struct cdrom_subchnl subchnl; /* parameter for ioctl call */ /* open device */ status = fd = open(device, O_RDONLY); if (status < 0) { perror("open failed"); exit(1); } while (1) { /* read subchannel data */ subchnl.cdsc_format = CDROM_MSF; /* want results in MSF format */ status = ioctl(fd, CDROMSUBCHNL, &subchnl); if (status < 0) { perror("CDROMSUBCHNL ioctl failed"); exit(1); } printf("Status: %s Track: %d Position: %02d:%02d:%02d (%02d:%02d:%02d)\r", audiostatus(subchnl.cdsc_audiostatus), subchnl.cdsc_trk, subchnl.cdsc_reladdr.msf.minute, subchnl.cdsc_reladdr.msf.second, subchnl.cdsc_reladdr.msf.frame, subchnl.cdsc_absaddr.msf.minute, subchnl.cdsc_absaddr.msf.second, subchnl.cdsc_absaddr.msf.frame); fflush(stdout); usleep(100000); /* delay 0.1 second */ } exit(0);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -