PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Brauche C Funktion die Status des CD-Roms liest



hunter
08-02-2004, 18:50
Folgendes Problem:

Gnome 2.4 wirft beim unmounten einer CD immer die CD aus. Das will ich aber nicht. Also möchte ich ein kleines C Programm haben das überprüft ob das Laufwerk gemountet ist oder nicht und das entsprechende Gegenteil tut.



#include <stdio.h>

int checkcdrom();

int main()
{
int status;
status = checkcdrom();

If (status == 0)
system("mount /mnt/cdrom");
else If (status == 1)
system("umount /mnt/cdrom");

return 0;
}



int checkcdrom()
{
- return 1 wenn CD-Rom gemounted
- return 0 wenn CD-Rom nicht gemounted
}



Und genau bei der Funktion komme ich nicht weiter. Wie mache ich das am besten ? Hab schon überlegt die Datei /etc/mtab einzulesen, aber irgendwie kommt da nur Murks raus.

Müsste ja eigentlich nur die existenz oder nicht existez folgender Zeilen feststellen:

/dev/scsi/host1/bus0/target0/lun0/cd /mnt/cdrom iso9660 ro,noexec,nosuid,nodev,iocharset=iso8859-15,codepage=850,umask=0,user=hunter 0 0

/dev/scsi/host1/bus0/target1/lun0/cd /mnt/cdrom2 iso9660 ro,noexec,nosuid,nodev,iocharset=iso8859-15,codepage=850,umask=0,user=hunter 0 0


Wobei das hier schon reichen würde:

/dev/scsi/host1/bus0/target0/lun0/cd /mnt/cdrom
/dev/scsi/host1/bus0/target1/lun0/cd /mnt/cdrom2


Kann mir da bitte jemand diese Funktion schrieben ? Kriebe das irgendwie nicht hin. Oder einen anderen Weg.

peschmae
08-02-2004, 19:20
Wie wärs mit einem Shellscript?



#!/bin/bash

MOUNTPOINT=$1

if $( cat /etc/mtab | grep -q $MOUNTPOINT ); then
umount $MOUNTPOINT
else
mount $MOUNTPOINT
fi


Wobei der Mountpoint des Laufwerks als Parameter übergeben werden muss.

Checks ob der Mountpoint ein möglicher ist kannst du ja selber noch einbauen ;)

MfG Peschmä

hunter
08-02-2004, 19:42
Wie langweilig ! ;)

Aber Ok. Danke. Werds mal damit machen. Letztlich ists ja nur zwei kleine Icons in meinem Gnome die zum schnellen mounten bzw. unmounten da sind.

Aber vieleicht kann ja noch jemand was zur C Funktion beisteuern. Soweit klappts nämlich, wenn ich return 0 oder 1 explizit vorgebe. Nur muss er das ja selbst rausfinden damits kompfortabel ist.

pik7
08-02-2004, 20:10
hallo,




#include<stdio.h>
#include<mntent.h>
#include<string.h>
#include<stdlib.h>

int main()
{

int check;

check=checkcdrom();

if(check==1){
printf("Cd unmount\n");
system("umount /mnt/cdrom");
}else{
printf("Cd mount\n");
system("mount /mnt/cdrom");
}

return 1;
}


int checkcdrom()
{

FILE *des;

struct mntent *mnt;

des=setmntent("/etc/mtab","r");

while((mnt=getmntent(des))!=NULL){

if((strcmp(mnt->mnt_dir,"/mnt/cdrom"))==0)

return 1;

}

return 0;
}



gruß

hunter
08-02-2004, 20:31
Danke. Klappt ebenfalls ohne Probleme.