File descriptoren in c++
-
Euch ist schon aufgefallen dass hier versucht wird den bool-Rückgabewert von is_open() als Filedeskriptor zu nutzen, oder?
Antwort: Nimm open() und keine C++-Streams. Du willst weder etwas gepuffertes noch Abstraktionsebenen für die File-API.
-
Ich dachte mir das das auch mit den fstreams geht.
-
Hmm jetzt kommt Fehler :
Eject yourself
: input/output errorstatic int open_cd() { int fd = open(CDROM,O_RDONLY | O_NONBLOCK); if(fd == -1) { if(errno = ENOMEDIUM) printf("Keine CD im Laufwerk\n"); else perror("Fehler bei open()"); exit(EXIT_FAILURE); } return fd; } static void open_tray (int cdrom) { if(ioctl (cdrom, CDROMEJECT)== -1) { perror ("Eject yourself\n"); exit (EXIT_FAILURE); } } int main() { int fd = open_cd(); open_tray(fd); }
-
Hmm ?
-
Welche Header hast du denn überhaupt eingebunden?
Mir scheint als ob da noch was fehlen würde?
-
Ich habe die Lösung gefunden:
static int open_cd() { int fd = open(CDROM,O_RDONLY | O_NONBLOCK); if(fd == -1) { if(errno = ENOMEDIUM) printf("Keine CD im Laufwerk\n"); else perror("Fehler bei open()"); exit(EXIT_FAILURE); } return fd; } static void open_tray (int cdrom) { if(ioctl (cdrom, CDROM_LOCKDOOR, 0) < 0) { perror("Unlock door\n"); } if(ioctl (cdrom, CDROMEJECT)== -1) { perror ("Eject yourself\n"); exit (EXIT_FAILURE); } } int main() { int fd = open_cd(); open_tray(fd); }
Wichtig ist, das das Device nicht gemounted ist.
-
Unlock door : Device or resource busy Eject yourself : Input/output error
Weis meinste den damit wie kann ich das gucken obs gemountet ist ?
-
mach mal: (in der Konsole)
umount /dev/cdrom
und starte erst danach das Program.
-
pyhax schrieb:
if(errno = ENOMEDIUM) printf("Keine CD im Laufwerk\n");
Siehst du den Bug?
-
Jetzt versteh ich auch nichts mehr es ging die ganze Zeit nicht Laptop
abgestürzt und jetzt kommt das :Unblock door :Device or resource busy
Aber er öffnet den Laufwerk und mach was ich im sage xD