glenda.party
term% ls -F
term% pwd
$home/manuals/9front/2/disk
term% cat index.txt
DISK(2)                       System Calls Manual                      DISK(2)

NAME
       opendisk, Disk - generic disk device interface

SYNOPSIS
       #include <u.h>
       #include <libc.h>
       #include <disk.h>

       typedef struct Disk {
            char *prefix;
            char part[NAMELEN];
            int fd, wfd, ctlfd, rdonly;
            int type;
            vlong secs, secsize, size, offset;
            int c, h, s;
       } Disk;

       Disk* opendisk(char *file, int rdonly, int noctl)

DESCRIPTION
       These routines provide a simple way to gather and use information about
       floppy(3) and sd(3) disks and disk partitions, as well as plain files.

       Opendisk  opens  file for reading and stores the file descriptor in the
       fd field of the Disk structure.  If rdonly is not  set,  opendisk  also
       opens file for writing and stores that file descriptor in wfd.  The two
       file descriptors are kept separate to help prevent accidents.

       If  noctl  is not set, opendisk looks for a ctl file in the same direc‐
       tory as the disk file; if it finds one, it declares the disk to  be  an
       sd device, setting the type field in the Disk structure to Tsd.  If the
       passed  file  is  named  fdndisk, it looks for a file fdnctl, and if it
       finds that, declares the disk to be a floppy disk, of type Tfloppy.  If
       either control file is found, it is opened for reading and writing, and
       the resulting file descriptor is saved as  ctlfd.   Otherwise  the  re‐
       turned disk has type Tfile.

       Opendisk  then  stats  the  file and stores its length in size.  If the
       disk is an sd partition, opendisk reads the sector size from  the  con‐
       trol  file  and  stores it in secsize; otherwise the sector size is as‐
       sumed to be 512, as is the case for floppy disks.  Opendisk then stores
       the disk size measured in sectors in secs.

       If the disk is an sd partition, opendisk parses  the  control  file  to
       find  the  partition's offset within its disk; otherwise it sets offset
       to zero.  If the disk is an ATA disk, opendisk reads the disk  geometry
       (number of cylinders, heads, and sectors) from the geometry line in the
       sd control file; otherwise it sets these to zero as well.  Name is ini‐
       tialized  with  the  base name of the disk partition, and is useful for
       forming messages to the sd control file.  Prefix is set to  the  passed
       filename without the name suffix.

       The  IBM  PC  BIOS interface allocates 10 bits for the number of cylin‐
       ders, 8 for the number of heads, and 6 for the number  of  sectors  per
       track.   Disk  geometries  are not quite so simple anymore, but to keep
       the interface useful, modern disks and BIOSes present  geometries  that
       still  fit within these constraints.  These numbers are still used when
       partitioning and  formatting  disks.   Opendisk  employs  a  number  of
       heuristics to discover this supposed geometry and store it in the c, h,
       and  s fields.  Disk offsets in partition tables and in FAT descriptors
       are stored in a form dependent upon these numbers,  so  opendisk  works
       hard  to  report  numbers that agree with those used by other operating
       systems; the numbers bear little or no resemblance to reality.

SOURCE
       /sys/src/libdisk/disk.c

SEE ALSO
       floppy(3), sd(3)

                                                                       DISK(2)