linux - input/output error in ejecting Cd rom from C code -
i have problems cd-rom on ubuntu 14.10. i`m trying run piece of code, , writes ioctl: input/output error , open() returns number 3. should mistake? cdrom path right? when wrote eject "dev/cdrom" in terminal, ejected.
/* 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 cdrom device. linux/cdrom.h header file specifies ** must given o_nonblock flag when opening. tests showed ** if isn't done, programme not work. */ if ((cdrom = open(cddevice,o_rdonly | o_nonblock)) < 0) { perror("open"); exit(1); } /* utilize ioctl send cdromeject command device */ if (ioctl(cdrom,cdromeject,0)<0) { perror("ioctl"); exit(1); } close(cdrom); }
here strace output.
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, "\177elf\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\320\37\2\0\0\0\0\0"..., 832) = 832 fstat(3, {st_mode=s_ifreg|0755, st_size=1845024, ...}) = 0 mmap(null, 3953344, prot_read|prot_exec, map_private|map_denywrite, 3, 0) = 0x7f423fa30000 mprotect(0x7f423fbeb000, 2097152, prot_none) = 0 mmap(0x7f423fdeb000, 24576, prot_read|prot_write, map_private|map_fixed|map_denywrite, 3, 0x1bb000) = 0x7f423fdeb000 mmap(0x7f423fdf1000, 17088, prot_read|prot_write, map_private|map_fixed|map_anonymous, -1, 0) = 0x7f423fdf1000 close(3) = 0 mmap(null, 4096, prot_read|prot_write, map_private|map_anonymous, -1, 0) = 0x7f423fff3000 mmap(null, 8192, prot_read|prot_write, map_private|map_anonymous, -1, 0) = 0x7f423fff1000 arch_prctl(arch_set_fs, 0x7f423fff1740) = 0 mprotect(0x7f423fdeb000, 16384, prot_read) = 0 mprotect(0x600000, 4096, prot_read) = 0 mprotect(0x7f4240018000, 4096, prot_read) = 0 munmap(0x7f423fff4000, 136133) = 0 open("/dev/cdrom", o_rdonly|o_nonblock) = 3 fstat(1, {st_mode=s_ifchr|0620, st_rdev=makedev(136, 1), ...}) = 0 mmap(null, 4096, prot_read|prot_write, map_private|map_anonymous, -1, 0) = 0x7f4240015000 write(1, "3\n", 23 ) = 2 ioctl(3, cdromeject, 0) = -1 eio (input/output error) dup(2) = 4 fcntl(4, f_getfl) = 0x8002 (flags o_rdwr|o_largefile) brk(0) = 0x2015000 brk(0x2036000) = 0x2036000 fstat(4, {st_mode=s_ifchr|0620, st_rdev=makedev(136, 1), ...}) = 0 mmap(null, 4096, prot_read|prot_write, map_private|map_anonymous, -1, 0) = 0x7f4240014000 lseek(4, 0, seek_cur) = -1 espipe (illegal seek) write(4, "ioctl: input/output error\n", 26ioctl: input/output error ) = 26 close(4) = 0 munmap(0x7f4240014000, 4096) = 0 exit_group(1) = ? +++ exited 1 +++
straced scheme eject:
bo@bo-thinkpad-edge-e530:~$ strace eject execve("/usr/bin/eject", ["eject"], [/* 75 vars */]) = 0 brk(0) = 0x7f3dbd946000 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) = 0x7f3dbd094000 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) = 0x7f3dbd072000 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, "\177elf\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\320\37\2\0\0\0\0\0"..., 832) = 832 fstat(3, {st_mode=s_ifreg|0755, st_size=1845024, ...}) = 0 mmap(null, 3953344, prot_read|prot_exec, map_private|map_denywrite, 3, 0) = 0x7f3dbcaae000 mprotect(0x7f3dbcc69000, 2097152, prot_none) = 0 mmap(0x7f3dbce69000, 24576, prot_read|prot_write, map_private|map_fixed|map_denywrite, 3, 0x1bb000) = 0x7f3dbce69000 mmap(0x7f3dbce6f000, 17088, prot_read|prot_write, map_private|map_fixed|map_anonymous, -1, 0) = 0x7f3dbce6f000 close(3) = 0 mmap(null, 4096, prot_read|prot_write, map_private|map_anonymous, -1, 0) = 0x7f3dbd071000 mmap(null, 8192, prot_read|prot_write, map_private|map_anonymous, -1, 0) = 0x7f3dbd06f000 arch_prctl(arch_set_fs, 0x7f3dbd06f740) = 0 mprotect(0x7f3dbce69000, 16384, prot_read) = 0 mprotect(0x7f3dbd29f000, 4096, prot_read) = 0 mprotect(0x7f3dbd096000, 4096, prot_read) = 0 munmap(0x7f3dbd072000, 136133) = 0 brk(0) = 0x7f3dbd946000 brk(0x7f3dbd967000) = 0x7f3dbd967000 open("/usr/lib/locale/locale-archive", o_rdonly|o_cloexec) = 3 fstat(3, {st_mode=s_ifreg|0644, st_size=4427728, ...}) = 0 mmap(null, 4427728, prot_read, map_private, 3, 0) = 0x7f3dbc675000 close(3) = 0 access("/dev/cdrom", f_ok) = 0 readlink("/dev/cdrom", "sr0", 4095) = 3 lstat("/dev", {st_mode=s_ifdir|0755, st_size=4300, ...}) = 0 lstat("/dev/sr0", {st_mode=s_ifblk|0660, st_rdev=makedev(11, 0), ...}) = 0 readlink("/dev/sr0", 0x7fff014d9428, 4095) = -1 einval (invalid argument) stat("/dev/sr0", {st_mode=s_ifblk|0660, st_rdev=makedev(11, 0), ...}) = 0 open("/etc/mtab", o_rdonly) = 3 fstat(3, {st_mode=s_ifreg|0644, st_size=911, ...}) = 0 mmap(null, 4096, prot_read|prot_write, map_private|map_anonymous, -1, 0) = 0x7f3dbd093000 read(3, "/dev/sda5 / ext4 rw,errors=remou"..., 4096) = 911 stat("/dev/sda5", {st_mode=s_ifblk|0660, st_rdev=makedev(8, 5), ...}) = 0 stat("proc", 0x7fff014dc740) = -1 enoent (no such file or directory) stat("sysfs", 0x7fff014dc740) = -1 enoent (no such file or directory) stat("none", 0x7fff014dc740) = -1 enoent (no such file or directory) stat("none", 0x7fff014dc740) = -1 enoent (no such file or directory) stat("none", 0x7fff014dc740) = -1 enoent (no such file or directory) stat("none", 0x7fff014dc740) = -1 enoent (no such file or directory) stat("udev", 0x7fff014dc740) = -1 enoent (no such file or directory) stat("devpts", 0x7fff014dc740) = -1 enoent (no such file or directory) stat("tmpfs", 0x7fff014dc740) = -1 enoent (no such file or directory) stat("none", 0x7fff014dc740) = -1 enoent (no such file or directory) stat("none", 0x7fff014dc740) = -1 enoent (no such file or directory) stat("none", 0x7fff014dc740) = -1 enoent (no such file or directory) stat("none", 0x7fff014dc740) = -1 enoent (no such file or directory) stat("/dev/sda6", {st_mode=s_ifblk|0660, st_rdev=makedev(8, 6), ...}) = 0 stat("binfmt_misc", 0x7fff014dc740) = -1 enoent (no such file or directory) stat("systemd", 0x7fff014dc740) = -1 enoent (no such file or directory) stat("gvfsd-fuse", 0x7fff014dc740) = -1 enoent (no such file or directory) read(3, "", 4096) = 0 close(3) = 0 munmap(0x7f3dbd093000, 4096) = 0 open("/etc/fstab", o_rdonly) = 3 fstat(3, {st_mode=s_ifreg|0664, st_size=595, ...}) = 0 mmap(null, 4096, prot_read|prot_write, map_private|map_anonymous, -1, 0) = 0x7f3dbd093000 read(3, "# /etc/fstab: static file system"..., 4096) = 595 read(3, "", 4096) = 0 close(3) = 0 munmap(0x7f3dbd093000, 4096) = 0 stat("/dev/sr0", {st_mode=s_ifblk|0660, st_rdev=makedev(11, 0), ...}) = 0 open("/usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache", o_rdonly) = 3 fstat(3, {st_mode=s_ifreg|0644, st_size=26258, ...}) = 0 mmap(null, 26258, prot_read, map_shared, 3, 0) = 0x7f3dbd08d000 close(3) = 0 geteuid() = 1000 open("/dev/sr0", o_rdwr|o_nonblock) = 3 ioctl(3, cdromeject, 0x7f3dbd9490e0) = -1 eio (input/output error) ioctl(3, sg_get_version_num, 0x7fff014dd4b8) = 0 ioctl(3, sg_io, {'s', sg_dxfer_none, cmd[6]=[1e, 00, 00, 00, 00, 00], mx_sb_len=32, iovec_count=0, dxfer_len=0, timeout=10000, flags=0, status=00, masked_status=00, sb[0]=[], host_status=0, driver_status=0, resid=0, duration=16, info=0}) = 0 ioctl(3, sg_io, {'s', sg_dxfer_none, cmd[6]=[1b, 00, 00, 00, 01, 00], mx_sb_len=32, iovec_count=0, dxfer_len=0, timeout=10000, flags=0, status=00, masked_status=00, sb[0]=[], host_status=0, driver_status=0, resid=0, duration=856, info=0}) = 0 ioctl(3, sg_io, {'s', sg_dxfer_none, cmd[6]=[1b, 00, 00, 00, 02, 00], mx_sb_len=32, iovec_count=0, dxfer_len=0, timeout=10000, flags=0, status=02, masked_status=01, sb[18]=[70, 00, 05, 00, 00, 00, 00, 0a, 00, 00, 00, 00, 53, 02, 00, 00, 00, 00], host_status=0, driver_status=0x8, resid=0, duration=4, info=0x1}) = 0 ioctl(3, fdeject, 0x7fff014dd4c8) = -1 enotty (inappropriate ioctl device) ioctl(3, mgsl_iocgparams or mmtimer_getres or mtioctop or sndctl_midi_mpumode, 0x7fff014dd4c8) = -1 enotty (inappropriate ioctl device) open("/usr/share/locale/locale.alias", o_rdonly|o_cloexec) = 4 fstat(4, {st_mode=s_ifreg|0644, st_size=2570, ...}) = 0 mmap(null, 4096, prot_read|prot_write, map_private|map_anonymous, -1, 0) = 0x7f3dbd08c000 read(4, "# locale name alias info base.\n#"..., 4096) = 2570 read(4, "", 4096) = 0 close(4) = 0 munmap(0x7f3dbd08c000, 4096) = 0 open("/usr/share/locale/en_us/lc_messages/libc.mo", o_rdonly) = -1 enoent (no such file or directory) open("/usr/share/locale/en/lc_messages/libc.mo", o_rdonly) = -1 enoent (no such file or directory) open("/usr/share/locale-langpack/en_us/lc_messages/libc.mo", o_rdonly) = -1 enoent (no such file or directory) open("/usr/share/locale-langpack/en/lc_messages/libc.mo", o_rdonly) = -1 enoent (no such file or directory) open("/usr/share/locale/en_us/lc_messages/eject.mo", o_rdonly) = -1 enoent (no such file or directory) open("/usr/share/locale/en/lc_messages/eject.mo", o_rdonly) = -1 enoent (no such file or directory) open("/usr/share/locale-langpack/en_us/lc_messages/eject.mo", o_rdonly) = -1 enoent (no such file or directory) open("/usr/share/locale-langpack/en/lc_messages/eject.mo", o_rdonly) = -1 enoent (no such file or directory) write(2, "eject: unable eject, lastly err"..., 67eject: unable eject, lastly error: inappropriate ioctl device ) = 67 exit_group(1) = ? +++ exited 1 +++
for reason, cdrom
rejects cdromeject
ioctl
take sg
(scsi generic) commands designed eject tray.
open("/dev/sr0", o_rdwr|o_nonblock) = 3 ioctl(3, cdromeject, 0x7f3dbd9490e0) = -1 eio (input/output error) ioctl(3, sg_get_version_num, 0x7fff014dd4b8) = 0 ioctl(3, sg_io, {'s', sg_dxfer_none, cmd[6]=[1e, 00, 00, 00, 00, 00], mx_sb_len=32, iovec_count=0, dxfer_len=0, timeout=10000, flags=0, status=00, masked_status=00, sb[0]=[], host_status=0, driver_status=0, resid=0, duration=16, info=0}) = 0 ioctl(3, sg_io, {'s', sg_dxfer_none, cmd[6]=[1b, 00, 00, 00, 01, 00], mx_sb_len=32, iovec_count=0, dxfer_len=0, timeout=10000, flags=0, status=00, masked_status=00, sb[0]=[], host_status=0, driver_status=0, resid=0, duration=856, info=0}) = 0 ioctl(3, sg_io, {'s', sg_dxfer_none, cmd[6]=[1b, 00, 00, 00, 02, 00], mx_sb_len=32, iovec_count=0, dxfer_len=0, timeout=10000, flags=0, status=02, masked_status=01, sb[18]=[70, 00, 05, 00, 00, 00, 00, 0a, 00, 00, 00, 00, 53, 02, 00, 00, 00, 00], host_status=0, driver_status=0x8, resid=0, duration=4, info=0x1}) = 0 ioctl(3, fdeject, 0x7fff014dd4c8) = -1 enotty (inappropriate ioctl device)
the "ioctl(3, sg_io, ...
" sequence of commands following:
allow_medium_removal
start_stop
payload 1 start_stop
payload 2 references:
https://github.com/karelzak/util-linux/blob/master/sys-utils/eject.c#l590 http://git.buildroot.net/busybox/plain/miscutils/eject.c?h=1_17_stable https://github.com/dylex/android_external_busybox/blob/master/miscutils/eject.c#l35
c linux ubuntu eject
No comments:
Post a Comment