Torbjxrn Kristoffersen wrote: > I'm trying to make a program that simply ejects the CD-ROM. The reason > why is that I'd like to learn more about the ioctl() call. > > Maybe I've misunderstood everything, but here's my code which doesn't > work: > > FILE *fd = fopen("/dev/cdrom", "w"); The first argument to ioctl() must be a descriptor (an integer), as returned from open(), not an ANSI stream (`FILE *'). Also, trying to open /dev/cdrom for writing is likely to fail. > int x; > > ioctl (fd, CDROMEJECT, &x); > > (I'm not really sure why I'm using 'x', but I saw it being used in > another example and I saw that > ioctl() took a third argument also) The CDROMEJECT ioctl() doesn't use the third argument, so you can just pass zero. The following program works fine for me. -- Glynn Clements <[EMAIL PROTECTED]> #include <unistd.h> #include <fcntl.h> #include <sys/ioctl.h> #include <linux/cdrom.h> #include <stdio.h> int main(void) { int fd = open("/dev/cdrom", O_RDONLY); if (fd < 0) { perror("open(\"/dev/cdrom\") failed"); return 1; } if (ioctl(fd, CDROMEJECT, 0) < 0) { perror("ioctl(CDROMEJECT) failed"); return 1; } return 0; }