关于弹出光驱的程序

今天看到《Linux网络编程》那本书的一个光驱弹出的程序,我记得在很早很早的时候,有人就写过不断自动弹出和自动关闭光驱的程序,当时还吓倒不少网民。

 

其实学过驱动或者学过高级编程的人写这样的程序都很简单,经过我的验证,《Linux网络编程》这本书的例子是有点小问题的,open里面缺少一个O_NONBLOCK。

 

否则打开会返回失败,errno的为123,查看/usr/include/asm-generic/errno.h发现错误是#define ENOMEDIUM 123 /* No medium found */,或者调用perror也可以找到具体失败的原因。

 

加上O_NONBLOCK选项后程序工作正常,具体原因我过几天看下CDROM的驱动程序再分析下。

#include <stdio.h> #include <string.h> #include <linux/cdrom.h> #include <fcntl.h> #include <sys/stat.h> #include <sys/types.h> #include <errno.h> int main(int argc, char *argv[]) { int fd=open("/dev/cdrom", O_RDONLY|O_NONBLOCK); if(fd<0) { perror("open error!/n"); return -1; } if(!ioctl(fd, CDROMEJECT, NULL)) { printf("eject success!/n"); } else { printf("eject error!/n"); } close(fd); return 0; } 

你可能感兴趣的:(关于弹出光驱的程序)