我在Ubuntu 14.10上的CD-Rom有问题。我正在尝试运行这段代码,它会写入ioctl:Input/output error,open()返回数字3。哪里应该有错误?我的CDROM路径正确吗?当我在终端中写入弹出"dev/cdrom"时,它被弹出了。
/* eject.c
** Copyright Paul Dwerryhouse, 1997-2004
*/
#include <sys/types.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <linux/cdrom.h>
#define CDDEVICE "/dev/cdrom" /* CDROM device */
int main(int argc,char **argv)
{
int cdrom; /* CDROM device file descriptor */
/* Open the CDROM device. The linux/cdrom.h header file specifies that
** it must be given the O_NONBLOCK flag when opening. My tests showed
** that if this isn't done, this program will not work.
*/
if ((cdrom = open(CDDEVICE,O_RDONLY | O_NONBLOCK)) < 0) {
perror("open");
exit(1);
}
/* Use ioctl to send the CDROMEJECT command to the device
*/
if (ioctl(cdrom,CDROMEJECT,0)<0) {
perror("ioctl");
exit(1);
}
close(cdrom);
}
这是strace输出。
execve("./frca", ["./frca"], [/* 76 vars */]) = 0
brk(0) = 0x2015000
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f4240016000
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=136133, ...}) = 0
mmap(NULL, 136133, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f423fff4000
close(3) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "177ELF211 3 >