C programm opensuse Problem

Dieses Thema im Forum "Informatik" wurde erstellt von oliralf, 25 Dez. 2012.

  1. hallo
    kennt sich da jemand aus !!

    ich soll unter opensuse ein C programm programmieren!! Es soll das cdlaufwerk Steuern

    also soll Cd laufwerk auswerfen und cd laufwerk schlissen
    habe es unter windows gemacht !!
    weis net unter oopensuse kann jemand da helfen!!
    habe die datei hochgeladen



    danke
     

    Anhänge:

    • CD.txt
      Dateigröße:
      1,5 KB
      Aufrufe:
      17
  2. AW: C programm opensuse Problem

    Hallo,
    habe ich selbst noch nie gemacht, aber evtl. hilft dir das hier weiter!
    http://openbook.galileocomputing.de...ung/Kap05-005.htm#RxxKap050050400017A1F03810B

    Gruß Markus
     
    1 Person gefällt das.
  3. AW: C programm opensuse Problem

    danke
    hat jemand opensuse habe es gemacht brauche um zur testen

    danke
     
  4. AW: C programm opensuse Problem

    Hallo,

    hab OpenSuse nicht installiert! Aber hier kannst du es runterladen. Wenn du nen Live-USB-Stick machst brauchst du es nicht mal installieren.
    http://software.opensuse.org/122/de

    Gruß Markus
     
    1 Person gefällt das.
  5. AW: C programm opensuse Problem

    opensues welsche von den soll ich downloaden?
     
    #5 oliralf, 30 Dez. 2012
    Zuletzt bearbeitet: 30 Dez. 2012
  6. AW: C programm opensuse Problem

    hat jemand opensues!!
     
  7. AW: C programm opensuse Problem

    Wenn du nen Stick machen möchstes brauchst du entweder Gnome Live oder KDE Live. Der Unterschied zwischen den beiden ist nur das Desktoppaket, was für deinen Fall egal sein sollte. Ich würde KDE nehmen, das ist stark an Win angelehnt! Wenn du es installieren willst solltest du die 4,7GB DVD downloaden, die funktioniert wie die Windows Installations-DVD, einfach einlegen, durchs Setup klicken und los gehts!
     
  8. AW: C programm opensuse Problem

    Hallo,

    du solltest beachten, dass es unter Linux keine Laufwerksbuchtaben (in deinem Beispiel x:) gibt.
    Unter Linux musst du einen Mountpoint defnieren (z.B. /media/cdrom) und dann das Device mounten (z.B. mount -t auto /dev/cdrom /media/cdrom).

    Öffnen und Schließen funktioniert aber nur, wenn das Gerät nicht(!!!!) gemountet ist!!!!!!!!!

    Gruß
     
    mbhlr0815 gefällt das.
  9. AW: C programm opensuse Problem

    ich habe das programm unter winows für linux erstellt bitte kann jemand mir da helfen!!

    danke

    was da falsch ist!!
    zahle sogar
    hier die datei also der code!!
    Den Anhang cd.txt betrachten
     
  10. AW: C programm opensuse Problem

    kann mir keiner helfen!!
     
  11. AW: C programm opensuse Problem

    Hallo,

    Kroni hatte dir doch einen Link geschickt (http://openbook.galileocomputing.de) hast du dir das mal durchgelesen ... ??? da ist dein Problem genau beschrieben (mit Beispielen für GNU Linux und BSD Unix).
    Du musst den CD Rom Treiber "Linuxkonform" ansprechen ... das ist da aber alles ehr genau beschrieben.
    Lies dir das durch, und stell dann bei Probelemen genaue Fragen.

    In deinem (letzten) Beispiel setzt du keinen Wert für die Variable cdrom ... du übergibst ioctl scheinbar eine nicht initalisierte Variable cdrom.

    Gruß
     
  12. AW: C programm opensuse Problem

    Folgende private Nachricht habe ich von oliralf erhalten:
    Hallo,


    also ich verstehe jetzt die Problematik nicht ... der komplette Code steht im genannten Buch drin, und muss nur per Copy Paste in eine Datei (z.b. cd.c) eingefügt werden.
    Zugegeben: Die Zeile "#include <unistd. h.>" enthält einen Fehler ... den habe ich aber in meinem Listing berichtigt.

    Folgendes Vorgehen:
    1.) cd.c im Root Verzeichnis erzeugen, und Quellcode reinkopieren
    2.) ins root Verzeichnis wechseln (cd ~/)
    3.) gcc cd.c -o cd aufrufen
    4.) ./cd aufrufen (das ist das Programm)
    5.) den Anweisungen des Menüs folgen (1=Schublade öffnen ....)

    Ich habe das Ganze auf einem debian System getestet ... und es funktioniert!

    Ich werde (zu diesem Thema) weder auf weitere private Nachrichten, und auf Geldangebote reagieren ... dieses Forum soll auch für andere Informationen liefern, und nicht zu einer "Auftragsbörse" verkommen.
    Alles Postings können öffentlich geschrieben, und konkrete Probleme öffentlich diskutiert werden. Mit "Ich verstehe es nicht" kann hier niemand etwas anfangen ... was genau verstehst du nicht ... Ich helfe hier im Forum nicht aus Finanziellen Interessen ... sondern weil mir hier auch oft und gut kostenlos geholfen wurde und wird! Und so soll es auch bleiben!


    Code:
    /* cdrom.c */
    #include <stdio.h>
    #include <unistd.h>
    #include <sys/ioctl.h>
    #include <fcntl.h>
    #include <stdlib.h>
    #include <linux/cdrom.h>
    #include <errno.h>
    /* Bitte ggf. Anpassen */
    #define CDROM "/dev/cdrom"
    #define FULL   0 /* komplette Audio-CD abspielen */
    static int open_cdrom (void) {
       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");
          exit (EXIT_FAILURE);
       }
    }
    /* Funktioniert nicht überall */
    static void close_tray (int cdrom) {
       if (ioctl (cdrom, CDROMCLOSETRAY) == -1) {
          printf ("CD-Tray bitte von Hand schließen\n");
       }
    }
    static void capability_cdrom (int cdrom) {
       const char *j[] = {"nein", "ja"};
       int caps = ioctl (cdrom, CDROM_GET_CAPABILITY);
       if (caps == -1) {
          perror ("CDROM_GET_CAPABILITY");
          return;
       }
       printf ("CDROM-Fähigkeiten:\n"
          "\tCD-R    : %s\n"
          "\tCD-RW   : %s\n"
          "\tDVD     : %s\n"
          "\tDVD-R   : %s\n"
          "\tDVD-RAM : %s\n",
          j[!!(caps & CDC_CD_R)],
          j[!!(caps & CDC_CD_RW)],
          j[!!(caps & CDC_DVD)],
          j[!!(caps & CDC_DVD_R)],
          j[!!(caps & CDC_DVD_RAM)]);
    }
    static void get_audio_status (int cdrom) {
       struct cdrom_subchnl sub;
       printf ("Audio-Status: ");
       fflush (stdout);
       sub.cdsc_format = CDROM_MSF;
       if (ioctl (cdrom, CDROMSUBCHNL, &sub))
          printf ("FAILED\n");
       else {
          switch (sub.cdsc_audiostatus) {
          case CDROM_AUDIO_INVALID:
             printf ("invalid\n");
             break;
          case CDROM_AUDIO_PLAY:
             printf ("playing");
             break;
          case CDROM_AUDIO_PAUSED:
             printf ("paused");
             break;
          case CDROM_AUDIO_COMPLETED:
             printf ("completed\n");
             break;
          case CDROM_AUDIO_ERROR:
             printf ("error\n");
             break;
          case CDROM_AUDIO_NO_STATUS:
             printf ("no status\n");
             break;
          default:
             printf ("Oops: unknown\n");
          }
          if (sub.cdsc_audiostatus == CDROM_AUDIO_PLAY ||
              sub.cdsc_audiostatus == CDROM_AUDIO_PAUSED) {
             printf (" at: %02d:%02d abs/ %02d:%02d track %d\n",
                sub.cdsc_absaddr.msf.minute,
                sub.cdsc_absaddr.msf.second,
                sub.cdsc_reladdr.msf.minute,
                sub.cdsc_reladdr.msf.second, sub.cdsc_trk);
          }
       }
    }
    static void content_cdrom (int cdrom) {
       struct cdrom_tochdr tochdr;
       struct cdrom_tocentry tocentry;
       int track;
       if (ioctl (cdrom, CDROMREADTOCHDR, &tochdr) == -1) {
          perror ("Kann den Header nicht holen");
          exit (EXIT_FAILURE);
       }
       printf ("\nInhalt %d Tracks:\n", tochdr.cdth_trk1);
       track = tochdr.cdth_trk0;
       while (track <= tochdr.cdth_trk1) {
          tocentry.cdte_track = track;
          tocentry.cdte_format = CDROM_MSF;
          if (ioctl (cdrom, CDROMREADTOCENTRY, &tocentry)==-1) {
             perror ("Kann den Inhalt der CD nicht ermitteln");
             exit (EXIT_FAILURE);
          }
          printf ("%3d: %02d:%02d:%02d (%06d) %s%s\n",
              tocentry.cdte_track,
              tocentry.cdte_addr.msf.minute,
              tocentry.cdte_addr.msf.second,
              tocentry.cdte_addr.msf.frame,
              tocentry.cdte_addr.msf.frame +
              tocentry.cdte_addr.msf.second * 75 +
              tocentry.cdte_addr.msf.minute * 75 * 60 - 150,
             (tocentry.cdte_ctrl & CDROM_DATA_TRACK) ?
             "data " : "audio",
             CDROM_LEADOUT == track ? " (leadout)" : "");
          track++;
       }
    }
    static void play_cdrom ( int cdrom, int flag ) {
       struct cdrom_tocentry tocentry;
       struct cdrom_msf play;
       int track = flag;
       int lead  = flag;
       
       if(flag == FULL) {
          track = 1;
          lead  = CDROM_LEADOUT;
       }
       else {
          track = flag;
          lead  = flag+1;
       }
       /* Anfang des ersten Liedes */
       tocentry.cdte_track = track;
       tocentry.cdte_format = CDROM_MSF;
       if (ioctl (cdrom, CDROMREADTOCENTRY, &tocentry) == -1) {
          perror ("Kann den Inhalt der CD nicht ermitteln\n");
          exit (EXIT_FAILURE);
       }
       play.cdmsf_min0 = tocentry.cdte_addr.msf.minute;
       play.cdmsf_sec0 = tocentry.cdte_addr.msf.second;
       play.cdmsf_frame0 = tocentry.cdte_addr.msf.frame;
       /* Ende des letzten Liedes */
       tocentry.cdte_track = lead;
       tocentry.cdte_format = CDROM_MSF;
       if (ioctl (cdrom, CDROMREADTOCENTRY, &tocentry) == -1) {
          perror ("Kann den Inhalt der CD nicht ermitteln\n");
          exit (EXIT_FAILURE);
       }
       play.cdmsf_min1 = tocentry.cdte_addr.msf.minute;
       play.cdmsf_sec1 = tocentry.cdte_addr.msf.second;
       play.cdmsf_frame1 = tocentry.cdte_addr.msf.frame;
       if (ioctl (cdrom, CDROMPLAYMSF, &play) == -1) {
          perror ("Kann CD nicht abspielen");
          exit (EXIT_FAILURE);
       }
    }
    static void stop_cdrom (int cdrom) {
       if (ioctl (cdrom, CDROMSTOP) == -1) {
          perror ("Kann CD nicht anhalten");
          return;
       }
    }
    static void pause_cdrom (int cdrom) {
       if (ioctl (cdrom, CDROMPAUSE) == -1) {
          perror ("Kann PAUSE nicht setzen");
          return;
       }
    }
    static void resume_cdrom (int cdrom) {
       if (ioctl (cdrom, CDROMRESUME) == -1) {
          perror ("Kann CD nicht mehr fortfahren");
          return;
       }
    }
    int main (void) {
       int fd_cdrom;
       int select;
       int track;
       
       fd_cdrom = open_cdrom();   
       do{
          printf("-1- CD-Tray öffnen\n");
          printf("-2- CD-Tray schließen\n");
          printf("-3- CDROM-Fähigkeiten\n");
          printf("-4- Audio-CD abspielen (komplett)\n");
          printf("-5- Einzelnen Track abspielen\n");
          printf("-6- <PAUSE> Audio-CD abspielen\n");
          printf("-7- <FORTFAHREN> Audio-CD abspielen\n");
          printf("-8- <STOP> Audio-CD abspielen\n");
          printf("-9- Aktuellen Status ermitteln\n");
          printf("-10- CD-Inhalt ausgeben\n");
          printf("-11- Programmende\n");
          printf("\nIhre Auswahl : ");
          scanf("%d",&select);
          switch( select ) {
             case 1: open_tray( fd_cdrom ); break;
             case 2: close_tray( fd_cdrom ); break;
             case 3: capability_cdrom (fd_cdrom); break;
             case 4: play_cdrom (fd_cdrom, FULL); break;
             case 5: printf("Welchen Track wollen Sie hören: ");
                     scanf("%d",&track);
                     play_cdrom( fd_cdrom, track); break;
             case 6: pause_cdrom( fd_cdrom ); break;
             case 7: resume_cdrom( fd_cdrom ); break;
             case 8: stop_cdrom( fd_cdrom ); break;
             case 9: get_audio_status( fd_cdrom );break;
             case 10: content_cdrom( fd_cdrom ); break;
             case 11: printf("Bye\n"); break;         
             default : printf("Häh!\n");         
          }      
       } while( select != 11 );
       stop_cdrom( fd_cdrom );
       close (fd_cdrom);
       return 0;
    }
     
    
     
    #12 mbhlr0815, 4 Jan. 2013
    Zuletzt bearbeitet: 4 Jan. 2013
  13. AW: C programm opensuse Problem

    In meinem letzten Beitrag ist ein kleiner Fehler enthalten.
    Es muss nicht "ins root Verzeichnis ...", sondern genaugenommen "ins home Verzeichnis ..." heissen.
     
    mbhlr0815 gefällt das.
  14. AW: C programm opensuse Problem

    vielen dank!!
    kann ich es auch mit live usb opensuse aus probieren?

    vielen dank noch mals !!
     
  15. AW: C programm opensuse Problem

    Hallo,

    natürlich kannst du es auch mit Live-USB-System testen. Dürfte eigentlich keine Probleme geben! Versuchs einfach, wenns nicht klappt nochmals melden!

    Gruß Markus
     
  16. AW: C programm opensuse Problem

    @oliralf: Nein, "das rote"(in meinem Beitrag vom 04.01.2013 10:00) kann und will ich nicht wegmachen! Was ich in diesem Forum schreibe muss du schon mir überlassen.
    Ich habe so langsam das Gefühl, dass dich die Frage überhaupt nicht intersseiert, und du nur Leute beschäftigen möchtest.
    Wenn du ersthaft an der Frage interessiert bist, dann probier doch endlich mal etwas selber aus,und stell dann konkrete Fragen. Installier dir ein Linux Betriebssystem und los gehts!
    Und noch eine Bitte: keine privaten Nachrichten (von dir) an mich ... solchen Quatsch muss ich nicht im Posteingang haben!!!


    Gruß


    Markus
     
    mbhlr0815 und (gelöschter Benutzer) gefällt das.
  17. AW: C programm opensuse Problem

    Ich hoffe mal, daß das jetzt keine Frage ist ... wenn doch, dann probier es doch einfach aus ... wenn die CD Schublade auf- und zufährt, dann "stimmt es" ... ansonsten "stimmt es nicht"!!!
     
  18. AW: C programm opensuse Problem

    ich habe ein fehler aber weis net was
    in der zeile 97 und 56 !

    also terminal zeigt mir das an!

    :97:6: warning: conflicting types for ‘close_cdrom’ [enabled by default]
    :56:4: note: previous implicit declaration of ‘close_cdrom’ was here

    Den Anhang cd.txt betrachten


    danke
     
  19. AW: C programm opensuse Problem

    Code:
    ...
    ...
    ...
    void open_cdrom(int fd); 
    void [SIZE=4][COLOR=#FF0000][B]close_cdrom[/B][/COLOR][/SIZE](int fd); ...
    ...
    ... 
    
    du hast 2 mal die Function open_cdrom als Protptype definiert ...
     

Diese Seite empfehlen