C programm opensuse Problem
-
hallo
ich soll unter opensuse linux das cd laufwerk steuern
also soll rein und raus kommen!!aber das klappt irgendwie net !!
bitte um hilfe
danke
hier die datei!
-
whatsup schrieb:
hier die datei! cd.txt
Boah, oida ...
#include <stdio.h> #include <sys/ioctl.h> #include <linux/cdrom.h> int open_drive (int cdrom) { if (ioctl(cdrom, CDROMEJECT) == -1) { // Fehler return 0; } // Erfolg return 1; } /* Funktioniert nicht überall */ int close_drive (int cdrom) { if (ioctl(cdrom, CDROMCLOSETRAY) == -1) { // Fehler return 0; } // Erfolg return 1; } void flush_input () { int c; // Solange 'c' ist nicht gleich ENDE while ((c = getchar()) != EOF) if (c == '\n') break; } int main () { // Variable fuer die Eingabe char eingabe = 0; // Schleife fuer das Menu while (1) { // Menu ausgeben printf("MENU\n"); printf("------------------------\n"); printf("CD-Laufwerk (o)effnen\n"); printf("CD-Laufwerk (s)chliessen\n"); printf("Programm (b)eenden\n"); printf("------------------------\n"); printf("Eingabe: "); // Ein Zeichen einlesen eingabe = getchar(); // Puffer leeren flush_input(); // Eingabe pruefen if (eingabe == 'o' || eingabe == 'O') printf("\n%s\n", (open_drive(0) == 1 ? "Das Laufwerk geht auf!" : "Fehler beim Oeffnen des Laufwerks!")); else if (eingabe == 's' || eingabe == 'S') printf("\n%s\n", (close_drive(0) == 1 ? "Das Laufwerk geht zu!" : "Fehler beim Schliessen des Laufwerks!")); else if (eingabe == 'b' || eingabe == 'B') return 0; else printf("\nUngueltige Eingabe!\n"); printf("\n\n"); } }
ftfy
whatsup schrieb:
das klappt irgendwie net !!
-
und?
was stimmt da net?danke aber wegen antwort!!
-
du übergibst ioctl keinen brauchbaren filedeskriptor und zu wenig parameter
manpage lesen hilft
benutz doch einfach perror() um an die fehlermeldung zu kommen
-
Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C (C89 und C99) in das Forum Linux/Unix verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
-
whatsup schrieb:
I glaub's jo ned...
ioctl(2) schrieb:
SYNOPSIS
#include <sys/ioctl.h>
int ioctl(int d, int request, ...);
DESCRIPTION
Theioctl()
function manipulates the underlying device parameters of special files. In particular, many operating characteristics of character special files (e.g., terminals) may be controlled with ioctl() requests. The argumentd
must be an open file descriptor.Du aber übergibst immer
0
...
-
anscheinend verstehst du überhaupt nicht was wir schreiben
deshalb hier ein bisschen code#include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <sys/ioctl.h> #include <fcntl.h> #include <linux/cdrom.h> int main(void) { //error handling für open weggelassen int fd = open("/dev/cdrom", O_RDONLY | O_NONBLOCK); if(ioctl(fd, CDROMEJECT) == -1) { perror("eject error"); } sleep(1); if(ioctl(fd, CDROMCLOSETRAY) == -1) { perror("closetray error"); } //error handling für close weggelassen close(fd); return EXIT_SUCCESS; }