in reply to Detect Plugged USB Flash Drive / CD in CDROM Drive

Hi! I tried to extract messages from the etc/mtab. Here's what I did, its very simple. I'm just beggining to learn RegEx, please bear with me hehe..
sub scan_cddvd { # mtab file /etc/mtab # cd/dvd signature /dev/sr0 open(MYINPUTFILE, "</etc/mtab"); my $cddvd_path = 'not found'; while(<MYINPUTFILE>){ my($line) = $_; chomp($line); if($line =~ m/^\/dev\/sr/){ print "FOUND CD/DVD\n"; print $line , "\n"; #$line =~ /(\/media\/.*)\ /; $line =~ /(\/media\/\S+)\s+/; my $newline = $1; print $newline , "\n"; while($newline =~ m/\\040/){ $newline =~ s/\\040/ /; } print $newline , "\n"; $cddvd_path = $newline } } close MYINPUTFILE; return $cddvd_path; }
I made a timer of some sort and calls this function to determine if a CD / DVD is inside the pretty ok. :D hehe. I would be applying the same concept with usb flash drives. Instead of looking for /dev/sr, I'd be looking for /dev/sdb hehe.hope it would work just fine.
Mabuhay Civil Engineers! :D

Replies are listed 'Best First'.
Re^2: Detect Plugged USB Flash Drive / CD in CDROM Drive
by Perlbotics (Bishop) on Nov 28, 2008 at 12:08 UTC

    Your snipped might work for your PC only and you'll only see the last /dev/sr device - which might not be a CD or DVD at all. The following suggestion is only a tiny improvement:

    use strict; # returns list of CD/DVD mountpoints or empty list sub scan_cddvd { my @drives = (); my $mtabfile = "/etc/mtab"; open my $mtfh, "<", $mtabfile or die "cannot open $mtabfile - $!"; while( <$mtfh> ){ my ($dev, $mountpoint, $fstype, $options) = split /\s+/; next unless $fstype =~ /udf|iso\d+/ && $options =~ /ro\b/; #ro: the /ro/-test above should skip CDRW too $mountpoint =~ s/\\(0\d+)/chr(oct($1))/eg; # resolve oct chars push @drives, $mountpoint; } close $mtfh; return @drives; } print "o <", join(">\no <", scan_cddvd), ">\n";
    Things to note: uses strict; avoids "not found" as a special failure-indicator; returns list of mountpoints; expands all octal escapes; less HW-dependent (e.g. IDE, SCSI, SATA, ...), e.g. not restricted to /dev/sdb; tries a little harder to find a CD or DVD (iso/udf,ro), uses 3 param open and die; no globs (MYINPUTFILE); implicit use of $_; will fail for derviant mtab-formats; ...