http://www.perlmonks.org?node_id=258319

joggi has asked for the wisdom of the Perl Monks concerning the following question:

I initally tried: open(CD,"/dev/cdrom"); read(CD,$lable,32,32808); print "lable--$lable\n"; close CD; but it doesn't work,what's the matter?thanks

Replies are listed 'Best First'.
Re: How do I read a CD volume label?
by pfaut (Priest) on May 15, 2003 at 03:29 UTC

    What is the significance of the numbers 32 and 32808? I don't think they are doing what you expect them to be doing.

    I suspect you want to read 32 bytes starting at 32808 bytes into the CD. What you are asking read to do is read the first 32 bytes from the cdrom and place them into $lable starting at a 32808 byte offset. This will put 32808 nul characters into $lable followed by the first 32 bytes from the cdrom.

    To do what I think you are trying to do, you need to first seek to the right offset, then read 32 bytes. Try this.

    open CD,"<","/dev/cdrom" or die "Unable to open CDROM: $!"; seek CD,32808,0 or die "Unable to seek: $!"; read CD,$lable,32 or die "Unable to read from CD: $!"; close CD; print $lable,$/;

    I tried this with a data disc on my system and it displayed Debian 3.0 r0 i386 Bin-1        1.

    90% of every Perl application is already written.
    dragonchild