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 argumentdmust 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; }
 
 
			
			
		