Re: determining size of cdrom

Jens Axboe (axboe@kernel.org)
Wed, 30 May 2001 23:15:09 +0200


On Wed, May 30 2001, Jeff Meininger wrote:
>
> I'm not subscribed to the mailing list, so please Cc a copy of your
> replies straight to my email address: jeffm@boxybutgood.com.
>
>
> I'm trying to determine the raw size of a cdrom disc, as in the size of
> the file you'd get by doing 'dd if=/dev/cdrom of=size_of_this.img'.
>
> I've tried the following things (with a disc in the drive) without
> success, and I'm hoping that someone will be able to point me in the right
> direction.
>
>
> struct stat s;
> stat("/dev/cdrom", &s);
> /* s.st_size is 0, s.st_blocks is 0. */
>
> int fd = open("/dev/cdrom", O_RDONLY);
>
> off_t bytes = lseek(fd, 0, SEEK_END);
> /* bytes is 0 */
>
> long sectors = 0;
> ioctl(fd, BLKGETSIZE, &sectors);
> /* sectors varies (never seems accurate) and is usually LONG_MAX */

At least this is the capacity as reported by the drive when we read the
table of contents.

> long ssz = 0;
> ioctl(fd, BLKSSZGET, &ssz);
> /* ssz varies, and is usually 1024. (shouldn't it be 2048?) */

Someone added a block size setting of 1024 to ide revalidate, and this
has screwed us for a awhile (ie atapi dvd-ram breaks). Recent ac has the
correct stuff to reset it.

> /* ioctl HDIO_GETGEO fails. */
>
> /* ioctl HDIO_GET_IDENTITY returns 0's for the c/h/s values I'm looking
> for. */
>
> I didn't find anything that looked obvious to me in linux/cdrom.h, except
> in the #ifdef __KERNEL__ section which I don't believe I can use from
> user space.

You can do it from user space with CDROMREADTOCHDR/CDROMREATOCENTRY if
you want, did you see those?

-- 
Jens Axboe

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/