TOC auslesen mit Linux

Hallo!
Ich bin grad an einem Linux Hardware-Kurs dran.
Mit diesem Code wird das Inhaltsverzeichnis einer
CD/DVD ausgelesen!
Im Grunde genommen habe ich Alles verstanden nur eben 2
Sachen nicht ganz!

Hier ist erstmal der Code:

Code:
static void toc(int cdrom)
{
	struct cdrom_tochdr tochdr;
	struct cdrom_tocentry tocentry;
	int track;

	if(ioctl(cdrom, CDROMREADTOCHDR, &tochdr) == -1)
	{
		perror("Header kann nicht gelesen werden!\n");
		exit(EXIT_FAILURE);
	}

	printf("Inhalt %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("Inhalt der CD kann nicht ermittelt werden!\n");
			exit(EXIT_FAILURE);
		}/*if*/

		printf("%3d: %02d:%02d:02 (%06d) %s%s\n",
	                 tocentry.cdte_track, /*Welcher Track?*/
	                 tocentry.cdte_addr.msf.minute, /*Minute*/
	                 tocentry.cdte_addr.msf.second, /*Sekunde*/
	                 tocentry.cdte_addr.msf.frame, /*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", /*Daten oder Audio?*/
																						CDROM_LEADOUT == track ? " (leadout)" : "");
		track++;

		}/*while*/
}

Die Ausgabe sieht so aus:
Code:
Inhalt 11 Tracks:
1: 00:02:02 (000000) (null) audio
Segmentation fault

1) Warum ein Segmentation Fault?
2) Was ergibt das?
Code:
tocentry.cdte_addr.msf.frame + tocentry.cdte_addr.msf.second * 75 +tocentry.cdte_addr.msf.minute * 75 * 60 -150

Danke für eure Hilfe!
 
Zurück
Oben