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!

    cd.txt



  • 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 !!

    ➡ Smart Questions - Wie man Fragen richtig stellt



  • 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.



  • ich habe es überarbeitet nochmal!!
    warum geht das net bin hilflos!!

    danke

    cd2.txt



  • whatsup schrieb:

    cd2.txt

    I glaub's jo ned... 👍

    ioctl(2) schrieb:

    SYNOPSIS

    #include <sys/ioctl.h>

    int ioctl(int d, int request, ...);

    DESCRIPTION
    The ioctl() 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 argument d 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;
    }
    

Anmelden zum Antworten