C programm opensuse Problem

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

K

Kroni

Gast
AW: C programm opensuse Problem

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

Gruß Markus
 
K

Kroni

Gast
AW: C programm opensuse Problem

opensues welsche von den soll ich downloaden?
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!
 
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ß
 
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ß
 
AW: C programm opensuse Problem

Folgende private Nachricht habe ich von oliralf erhalten:
Zitat von oliralf:
hallo
können sie mir bitte helfen zahle auch verstehe es net!!
danke
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;
}
 
Zuletzt bearbeitet:
AW: C programm opensuse Problem

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

vielen dank noch mals !!
 
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
 
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
 
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 ...
 
Top