MyWebUniversity.com Home Page
 



OpenSolaris man pages main menu


Ioctl Requests                                           mtio(7I)



NAME
     mtio - general magnetic tape interface

SYNOPSIS
     #include 
     #include 
     #include 


DESCRIPTION
     1/2", 1/4", 4mm, and 8mm magnetic tape drives all share  the
     same general character device interface.


     There are two types of tape records: data records  and  end-
     of-file  (EOF)  records. SEOF records are also known as tape
     marks and file marks. A record is separated  by  interrecord
     (or tape) gaps on a tape.


     End-of-recorded-media (EOM) is indicated by two EOF marks on
     1/2"  tape;  by one EOF mark on 1/4", 4mm, and 8mm cartridge
     tapes.

  1/2 Reel Tape"
     Data bytes are recorded in parallel onto the  9-track  tape.
     Since  it  is  a  variable-length tape device, the number of
     bytes in a  physical record may vary.


     The recording formats available (check specific tape  drive)
     are  800  BPI,  1600  BPI,  6250  BPI, and data compression.
     Actual storage capacity is a function of the recording  for-
     mat  and  the  length of the tape reel. For example, using a
     2400 foot tape, 20 Mbyte can be stored  using  800  BPI,  40
     Mbyte using 1600 BPI, 140 Mbyte using 6250 BPI, or up to 700
     Mbyte using data compression.

  1/4 Cartridge Tape"
     Data is recorded serially  onto  1/4"  cartridge  tape.  The
     number  of  bytes  per  record is determined by the physical
     record size of the device. The I/O request size  must  be  a
     multiple  of  the  physical  record  size of the device. For
     QIC-11, QIC-24, and QIC-150 tape drives, the block  size  is
     512 bytes.


     The records are recorded on tracks in a  serpentine  motion.
     As  one  track  is completed, the drive switches to the next
     and begins writing in the  opposite  direction,  eliminating
     the  wasted  motion  of  rewinding. Each file, including the
     last, ends with one file mark.



SunOS 5.11          Last change: 15 Sep 2007                    1






Ioctl Requests                                           mtio(7I)



     Storage capacity is based on the number of tracks the  drive
     is  capable  of  recording.  For example, 4-track drives can
     only record 20 Mbyte of data on a  450  foot  tape;  9-track
     drives  can  record  up to 45 Mbyte of data on a tape of the
     same length. QIC-11 is the only tape  format  available  for
     4-track  tape  drives.  In contrast, 9-track tape drives can
     use either QIC-24 or QIC-11. Storage capacity is not  appre-
     ciably affected by using either format. QIC-24 is preferable
     to QIC-11 because it records a reference signal to mark  the
     position  of the first track on the tape, and each block has
     a unique block number.


     The QIC-150 tape drives require DC-6150 (or equivalent) tape
     cartridges  for  writing.  However, they can read other tape
     cartridges in QIC-11, QIC-24, or QIC-120 tape formats.

  8mm Cartridge Tape
     Data is recorded serially onto 8mm  helical  scan  cartridge
     tape.  Since it is a variable-length tape device, the number
     of bytes in a  physical record may vary. The recording  for-
     mats  available  (check  specific  tape  drive) are standard
     2Gbyte, 5Gbyte, and compressed format.

  4mm DAT Tape
     Data is recorded either in Digital Data Storage  (DS)  tape
     format  or in Digital Data Storage, Data Compressed (DS-DC)
     tape format. Since it is a variable-length tape device,  the
     number  of bytes in a  physical record may vary. The record-
     ing formats available are  standard  2Gbyte  and  compressed
     format.

  Persistent Error Handling
     Persistent error handling is a modification of  the  current
     error  handling  behaviors,  BSD  and  SVR4. With persistent
     error handling enabled, all tape operations after  an  error
     or  exception  will  return  immediately with an error. Per-
     sistent error handling can be most useful with  asynchronous
     tape  operations  that  use the aioread(3C) and aiowrite(3C)
     functions.


     To enable persistent error  handling,  the  ioctl  MTIOCPER-
     SISTENT  must  be  issued. If this ioctl succeeds, then per-
     sistent error handling is enabled and  changes  the  current
     error  behavior.  This  ioctl will fail if the device driver
     does not support persistent error handling.


     With persistent error handling enabled, all tape  operations
     after  an exception or error will return with the same error
     as the first command that failed; the operations will not be



SunOS 5.11          Last change: 15 Sep 2007                    2






Ioctl Requests                                           mtio(7I)



     executed.  An exception is some event that might stop normal
     tape operations, such as an End Of File (EOF)  mark  or   an
     End  Of  Tape  (EOT) mark. An example of an error is a media
     error. The MTIOCLRER ioctl must be issued to  allow  normal
     tape operations to continue and to clear the error.


     Disabling  persistent  error  handling  returns  the   error
     behavior  to  normal SVR4 error handling, and will not occur
     until all outstanding operations are completed. Applications
     should  wait  for  all  outstanding  operations  to complete
     before disabling persistent error handling. Closing the dev-
     ice  will  also  disable persistent error handling and clear
     any errors or exceptions.


     The Read Operation and Write Operation  subsections  contain
     more  pertinent information reguarding persistent error han-
     dling.

  Read Operation
     The read(2) function reads the next record on the tape.  The
     record size is passed back as the number of bytes read, pro-
     vided it is not greater than the number  requested.  When  a
     tape  mark  or  end  of  data  is read, a zero byte count is
     returned; all successive reads  after  the  zero  read  will
     return an error and errno will be set to EIO. To move to the
     next file, an MTFSF ioctl can be issued before or after  the
     read causing the error. This error handling behavior is dif-
     ferent from the older BSD behavior, where another read  will
     fetch  the  first  record  of the next tape file. If the BSD
     behavior is required, device names containing the  letter  b
     (for BSD behavior) in the final component should be used. If
     persistent error handling was enabled with either the BSD or
     SVR4  tape  device  behavior, all operations after this read
     error will return EIO errors until the MTIOCLRER  ioctl  is
     issued. An MTFSF ioctl can then he issued.


     Two successful successive reads that both return  zero  byte
     counts  indicate  EOM on the tape. No further reading should
     be performed past the EOM.


     Fixed-length I/O tape devices require the  number  of  bytes
     read to be a multiple of the physical record size. For exam-
     ple, 1/4" cartridge tape devices only read multiples of  512
     bytes.  If  the blocking factor is greater than 64,512 bytes
     (minphys limit), fixed-length I/O tape devices read multiple
     records.





SunOS 5.11          Last change: 15 Sep 2007                    3






Ioctl Requests                                           mtio(7I)



     Most tape devices which support variable-length  I/O  opera-
     tions  may  read a range of 1 to 65,535 bytes. If the record
     size exceeds 65,535 bytes, the driver reads multiple records
     to  satisfy  the request. These multiple records are limited
     to 65,534 bytes.  Newer  variable-length  tape  drivers  may
     relax  the  above  limitation and allow applications to read
     record sizes larger than 65,534. Refer to the specific  tape
     driver man page for details.


     Reading past logical EOT is transparent to the user. A  read
     operation should never hit physical EOT.


     Read requests that are lesser than a  physical  tape  record
     are not allowed. Appropriate error is returned.

  Write Operation
     The write(2) function writes the next record  on  the  tape.
     The record has the same length as the given buffer.


     Writing is allowed on 1/4" tape at either the  beginning  of
     tape  or  after  the last written file on the tape. With the
     Exabyte 8200, data may be appended only at the beginning  of
     tape,  before  a filemark, or after the last written file on
     the tape.


     Writing is not so restricted on 1/2", 4mm, and the other 8mm
     cartridge  tape  drives.  Care should be used when appending
     files onto 1/2" reel tape devices, since an extra file  mark
     is  appended after the last file to mark the EOM. This extra
     file mark must be overwritten to prevent the creation  of  a
     null file. To facilitate write append operations, a space to
     the EOM  ioctl  is  provided.  Care  should  be  taken  when
     overwriting  records;  the erase head is just forward of the
     write head and any following records will also be erased.


     Fixed-length I/O tape devices require the  number  of  bytes
     written  to  be  a multiple of the physical record size. For
     example, 1/4" cartridge tape devices only write multiples of
     512 bytes.


     Fixed-length I/O tape devices write multiple records if  the
     blocking  factor  is  greater  than  64,512  bytes  (minphys
     limit). These multiple writes are limited to  64,512  bytes.
     For  example,  if a write request is issued for 65,536 bytes
     using a 1/4" cartridge tape,  two  writes  are  issued;  the
     first for 64,512 bytes and the second for 1024 bytes.



SunOS 5.11          Last change: 15 Sep 2007                    4






Ioctl Requests                                           mtio(7I)



     Most tape devices which support variable-length  I/O  opera-
     tions  may write a range of 1 to 65,535 bytes. If the record
     size  exceeds  65,535  bytes,  the  driver  writes  multiple
     records  to  satisfy the request. These multiple records are
     limited to 65,534 bytes. As an example, if a  write  request
     for 65,540 bytes is issued, two records are written; one for
     65,534 bytes followed by another record for 6  bytes.  Newer
     variable-length  tape drivers may relax the above limitation
     and allow applications to write record  sizes  larger   than
     65,534.  Refer  to  the  specific  tape  driver man page for
     details.


     When logical EOT is encountered during a write,  that  write
     operation  completes  and  the  number of bytes successfully
     transferred is returned (note that a 'short write' may  have
     occurred  and  not  all  the requested bytes would have been
     transferred. The actual amount of data written  will  depend
     on  the  type  of  device  being  used). The next write will
     return a zero byte count. A third  write  will  successfully
     transfer  some  bytes  (as  indicated  by  the returned byte
     count, which again could be a short write); the fourth  will
     transfer  zero  bytes,  and so on, until the physical EOT is
     reached and all writes will fail with EIO.


     When logical EOT is encountered with persistent  error  han-
     dling  enabled, the current write may complete or be a short
     write. The next write will return a zero byte count. At this
     point  an  application  should  act appropriately for end of
     tape cleanup or issue yet another write, which  will  return
     the error ENOSPC. After clearing the exception with MTIOCLR-
     ER, the next write will succeed (possibly short),  followed
     by  another  zero  byte write count, and then another ENOSPC
     error.


     Allowing writes after LEOT has been encountered enables  the
     flushing  of buffers. However, it is strongly recommended to
     terminate the writing and close the file as soon  as  possi-
     ble.


     Seeks are ignored in tape I/O.

  Close Operation
     Magnetic tapes are rewound  when  closed,  except  when  the
     "no-rewind"  devices  have  been specified. The names of no-
     rewind device files use the letter n as the end of the final
     component.   The   no-rewind   version   of  /dev/rmt/0l  is
     /dev/rmt/0ln. In case of error for a no-rewind  device,  the
     next open rewinds the device.



SunOS 5.11          Last change: 15 Sep 2007                    5






Ioctl Requests                                           mtio(7I)



     If the driver was opened for reading and a no-rewind  device
     has  been  specified,  the  close advances the tape past the
     next filemark (unless the current file position is at  EOM),
     leaving  the  tape  correctly  positioned  to read the first
     record of the next file. However, if  the  tape  is  at  the
     first record of a file it doesn't advance again to the first
     record of the next file. These semantics are different  from
     the older BSD behavior. If BSD behavior is required where no
     implicit space operation is  executed  on  close,  the  non-
     rewind   device  name  containing  the  letter  b  (for  BSD
     behavior) in the final component should be specified.


     If data was written, a file mark is automatically written by
     the  driver  upon  close. If the rewinding device was speci-
     fied, the tape will be rewound after the file mark is  writ-
     ten. If the user wrote a file mark prior to closing, then no
     file mark is written  upon  close.  If  a  file  positioning
     ioctl,  like rewind, is issued after writing, a file mark is
     written before repositioning the tape.


     All buffers are flushed on closing a tape device. Hence,  it
     is  strongly  recommended  that the application wait for all
     buffers to be flushed before closing the device. This can be
     done  by  writing  a  filemark  via MTWEOF, even with a zero
     count.


     Note that for 1/2" reel tape devices,  two  file  marks  are
     written  to  mark  the  EOM before rewinding or performing a
     file positioning ioctl. If the user wrote a file mark before
     closing  a  1/2"  reel  tape  device, the driver will always
     write a file mark before closing to insure that the  end  of
     recorded media is marked properly. If the non-rewinding dev-
     ice was specified, two file marks are written and  the  tape
     is left positioned between the two so that the second one is
     overwritten on a subsequent open(2) and write(2).


     If no data was written and the driver was opened for  WRITE-
     ONLY  access, one or two file marks are written, thus creat-
     ing a null file.


     After closing the device, persistent error handling will  be
     disabled and any error or exception will be cleared.

IOCTLS
     Not all devices support all ioctls. The  driver  returns  an
     ENOTY error on unsupported ioctls.




SunOS 5.11          Last change: 15 Sep 2007                    6






Ioctl Requests                                           mtio(7I)



     The following structure definitions for magnetic tape  ioctl
     commands are from .


     The minor device byte structure is::

       15      7      6          5          4         3          2       1   0
       
       Unit #       BSD      Reserved   Density   Density   No rewind    Unit #
       Bits 7-15   behavior              Select    Select    on Close    Bits 0-1


       /*
        * Layout of minor device byte:
        */
       #define MTUNIT(dev) (((minor(dev) & 0xff80) >> 5) ]
       (minor(dev) & 0x3))
       #define MTNOREWIND (1 <<2)
       #define MTDENSITYMASK  (3 <<3)
       #define MTDENSITY1 (0 <<3)   /* Lowest density/format */
       #define MTDENSITY2 (1 <<3)
       #define MTDENSITY3 (2 <<3)
       #define MTDENSITY4 (3 <<3)   /* Highest density/format */
       #define MTMINOR(unit)    (((unit & 0x7fc) << 5) ] (unit & 0x3))
       #define MTBSD (1 <<6)       /* BSD behavior on close */


       /* Structure for MTIOCTOP - magnetic tape operation command */

       struct  mtop {
         short   mtop;       /* operation */
         daddrt mtcount;    /* number of operations */
       };


       /* Structure for MTIOCLTOP - magnetic tape operation command */
       Works exactly like MTIOCTOP except passes 64 bit mtcount values.
       struct  mtlop    {
               short           mtop;
               short           pad[3];
               int64t         mtcount;
       };



     The following operations of MTIOCTOP  and  MTIOCLTOP  ioctls
     are supported:

     MTWEOF           write an end-of-file record






SunOS 5.11          Last change: 15 Sep 2007                    7






Ioctl Requests                                           mtio(7I)



     MTFSF            forward space over file mark


     MTBSF            backward space over file  mark  (1/2",  8mm
                      only)


     MTFSR            forward space to inter-record gap


     MTBSR            backward space to inter-record gap


     MTREW            rewind


     MTOFL           rewind and take the drive off-line


     MTNOP            no operation, sets status only


     MTRETEN          retension the tape (cartridge tape only)


     MTERASE          erase the entire tape and rewind


     MTEOM            position to EOM


     MTNBSF           backward space file to beginning of file


     MTSRSZ           set record size


     MTGRSZ           get record size


     MTEL           get current position


     MTSEK           go to  requested  position


     MTFSF           forward to requested number  of  sequential
                      file marks


     MTBSF           backward to requested number of  sequential
                      file marks



SunOS 5.11          Last change: 15 Sep 2007                    8






Ioctl Requests                                           mtio(7I)



     MTLOCK           prevent media removal


     MTUNLOCK         allow media removal


     MTLOAD           load the next tape cartridge into the  tape
                      drive


     MTIOCGETEROR    retrieve error records from the st driver


       /* structure for MTIOCGET - magnetic tape get status command */

       struct  mtget {
         short   mttype;  /* type of magtape device */
       /* the following two registers are device dependent */
         short  mtdsreg;      /* "drive status" register */
         short  mterreg;      /* "error" register */
       /* optional error info. */
         daddrt   mtresid;   /* residual count */
         daddrt   mtfileno;  /* file number of current position */
         daddrt   mtblkno;   /* block number of current position */
         ushortt  mtflags;
         short     mtbf;      /* optimum blocking factor */
       };
       /* structure for MTIOCGETDRIVETYPE - get tape config data command */
       struct mtdrivetyperequest {
         int  size;
         struct  mtdrivetype    *mtdtp;
       };
       struct mtdrivetype {
         char    name[64];                  /* Name, for debug */
         char    vid[25];                   /* Vendor id and product id */
         char    type;                      /* Drive type for driver */
         int     bsize;                     /* Block size */
         int     options;                   /* Drive options */
         int     maxrretries;              /* Max read retries */
         int     maxwretries;              /* Max write retries */
         uchart densities[MTNDENSITIES];  /* density codes,low->hi */
         uchart defaultdensity;           /* Default density chosen */
         uchart speeds[MTNSPEDS];        /* speed codes, low->hi */
         ushortt nonmotiontimeout;       /* Seconds for non-motion */
         ushortt iotimeout;               /* Seconds for data to from tape */
         ushortt rewindtimeout;           /* Seconds to rewind */
         ushortt spacetimeout;            /* Seconds to space anywhere */
         ushortt loadtimeout;             /* Seconds to load tape and ready */
         ushortt unloadtimeout;           /* Seconds to unload */
         ushortt erasetimeout;            /* Seconds to do long erase */
       };




SunOS 5.11          Last change: 15 Sep 2007                    9






Ioctl Requests                                           mtio(7I)



       /* structure for MTIOCGETPOS and MTIOCRESTPOS - get/set tape position */
            /*
         * eof/eot/eom codes.
             */
        typedef enum {
              STNOEOF,
              STEOFPENDING,         /* filemrk pending */
              STEOF,                 /* at filemark */
              STEOTPENDING,         /* logical eot pend. */
              STEOT,                 /* at logical eot */
              STEOM,                 /* at physical eot */
              STWRITEAFTEREOM      /* flag allowing writes after EOM */
            }pstatus;

            typedef enum { invalid, legacy, logical } posmode;

            typedef struct tapepos {
                    uint64t lgclblkno;   /* Blks from start of partition */
                    int32t fileno;       /* Num. of current file */
                    int32t blkno;        /* Blk  number in current file */
                    int32t partition;    /* Current partition */
                    pstatus eof;         /* eof states */
                    posmode pmode;         /* which pos. data is valid */
                    char    pad[4];
            }tapepost;

            If the pmode is legacy,fileno and blkno fields are valid.
            If the pmode is logical, lgclblkno field is valid.



     The MTWEOF ioctl is used for writing file marks to tape. Not
     only  does  this signify the end of a file, but also usually
     has the side effect of flushing  all  buffers  in  the  tape
     drive  to  the  tape  medium.  A zero count MTWEOF will just
     flush all the buffers and will not  write  any  file  marks.
     Because  a successful completion of this tape operation will
     guarantee that all tape data has been written  to  the  tape
     medium, it is recommended that this tape operation be issued
     before closing a tape device.


     When spacing forward over a record (either data or EOF), the
     tape  head  is positioned in the tape gap between the record
     just skipped and the next record. When spacing forward  over
     file marks (EOF records), the tape head is positioned in the
     tape gap between the next EOF record  and  the  record  that
     follows it.


     When spacing backward over a record (either  data  or  EOF),
     the  tape  head  is  positioned  in the tape gap immediately



SunOS 5.11          Last change: 15 Sep 2007                   10






Ioctl Requests                                           mtio(7I)



     preceding the tape record where the tape head  is  currently
     positioned.  When  spacing  backward  over  file  marks (EOF
     records), the tape  head  is  positioned  in  the  tape  gap
     preceding the EOF. Thus the next read would fetch the EOF.


     Record skipping does not go past a file mark; file  skipping
     does  not go past the EOM. After an MTFSR  com-
     mand, the driver leaves the tape logically positioned before
     the EOF. A related feature is that EOFs remain pending until
     the tape is closed. For example, a program which first reads
     all  the  records  of a file up to and including the EOF and
     then performs an MTFSF command will  leave  the  tape  posi-
     tioned  just  after  that same EOF, rather than skipping the
     next file.


     The MTNBSF and MTFSF operations are  inverses.  Thus,  an  "
     MTFSF -1" is equivalent to an " MTNBSF 1". An " MTNBSF 0" is
     the same as " MTFSF 0"; both position the tape device at the
     beginning of the current file.


     MTBSF moves the tape backwards by file marks. The tape posi-
     tion  will  end  on  the  beginning  of the tape side of the
     desired file mark. An " MTBSF 0" will position the  tape  at
     the end of the current file, before the filemark.


     MTBSR and MTFSR operations  perform  much  like  space  file
     operations,  except  that  they  move  by records instead of
     files. Variable-length I/O devices (1/2" reel, for  example)
     space  actual records; fixed-length I/O devices space physi-
     cal records (blocks).  1/4"  cartridge  tape,  for  example,
     spaces  512 byte physical records. The status ioctl residual
     count contains the number of files or records not skipped.


     MTFSF and MTBSF space forward or  backward,  respectively,
     to  the  next  occurrence  of  the  requested number of file
     marks, one following another. If there are  more  sequential
     file  marks  on tape than were requested, it spaces over the
     requested number and  positions  after  the  requested  file
     mark. Note that not all drives support this command and if a
     request is  sent  to  a  drive  that  does  not,  ENOTY  is
     returned.


     MTOFL rewinds and, if appropriate, takes  the  device  off-
     line  by unloading the tape. It is recommended that the dev-
     ice be closed after offlining and  then  re-opened  after  a
     tape  has  been  inserted to facilitate portability to other



SunOS 5.11          Last change: 15 Sep 2007                   11






Ioctl Requests                                           mtio(7I)



     platforms and other operating systems. Attempting to re-open
     the  device  with no tape will result in an error unless the
     ONDELAY flag is used. (See open(2).)


     The MTRETEN retension ioctl applies only to  1/4"  cartridge
     tape  devices. It is used to restore tape tension, improving
     the tape's soft error rate after extensive start-stop opera-
     tions or long-term storage.


     MTERASE rewinds the tape, erases it completely, and  returns
     to  the  beginning  of  tape.  Erasing  may take a long time
     depending on the device and/or  tapes.   For  time  details,
     refer to the the drive specific manual.


     MTEOM positions the tape at a location just after  the  last
     file  written  on the tape. For 1/4" cartridge and 8mm tape,
     this is after the last file mark on the tape. For 1/2"  reel
     tape,  this is just after the first file mark but before the
     second (and last) file mark on the  tape.  Additional  files
     can then be appended onto the tape from that point.


     Note the difference between MTBSF (backspace over file mark)
     and MTNBSF (backspace file to beginning of file). The former
     moves the tape backward until it crosses an EOF mark,  leav-
     ing  the  tape  positioned  before the file mark. The latter
     leaves the tape  positioned  after  the  file  mark.  Hence,
     "MTNBSF n" is equivalent to "MTBSF (n]1)" followed by "MTFSF
     1". The 1/4" cartridge tape devices do not support MTBSF.


     MTSRSZ and MTGRSZ are used  to  set  and  get  fixed  record
     lengths.  The  MTSRSZ ioctl allows variable length and fixed
     length tape drives that support multiple record sizes to set
     the record length. The mtcount field of the  mtop struct is
     used to pass the record size to/from the  st driver. A value
     of  0 indicates variable record size. The MTSRSZ ioctl makes
     a variable-length tape device  behave  like  a  fixed-length
     tape  device. Refer to the specific tape driver man page for
     details.


     MTLOAD loads the next tape cartridge into  the  tape  drive.
     This is generally only used with stacker and tower type tape
     drives which handle multiple tapes per tape  drive.  A  tape
     device  without  a  tape  inserted  can  be  opened with the
     ONDELAY flag, in order to execute this operation.





SunOS 5.11          Last change: 15 Sep 2007                   12






Ioctl Requests                                           mtio(7I)



     MTIOCGETEROR allows  user-level  applications  to  retrieve
     error  records  from the st driver. An error record consists
     of the SCSI  command  cdb  which  causes  the  error  and  a
     scsiarqstatus(9S)  structure  if available. The user-level
     application is responsible for allocating and releasing  the
     memory   for   mteecdbbuf   and  scsiarqstatus  of  each
     mterrorentry.    Before    issuing    the    ioctl,     the
     mteearqstatuslen  value  should  be  at  least  equal  to
     "sizeof(struct scsiarqstatus)." If more  sense  data  than
     the    size   of   scsiarqstatus(9S)   is   desired,   the
     mteearqstatuslen  may  be  larger   than   "sizeof(struct
     scsiarqstatus)" by the amount of additional extended sense
     data     desired.      The     esaddlen      field      of
     scsiextendedsense(9S)  can be used to determine the amount
     of valid sense data returned by the device.


     The MTIOCGET get status ioctl  call  returns  the  drive  ID
     (mttype),   sense   key   error  (mterreg),  file   number
     (mtfileno), optimum  blocking  factor  (mtbf)  and  record
     number  (mtblkno)  of  the  last  error. The residual count
     (mtresid) is set to the number of bytes not transferred  or
     files/records not spaced. The flags word (mtflags) contains
     information indicating if the device is SCSI, if the  device
     is  a  reel  device and whether the device supports absolute
     file positioning. The mtflags also indicates if the  device
     is  requesting cleaning media be used, whether the device is
     capable of reporting the requirement of cleaning  media  and
     if the currently loaded media is WORM (Write Once Read Many)
     media.

     Note -

       When tape alert cleaning is managed by the st driver,  the
       tape  target  driver may continue to return a "drive needs
       cleaning" status unless an MTIOCGET ioctl() call  is  made
       while the cleaning media is in the drive.


     The  MTIOCGETDRIVETYPE get drivetype ioctl call returns  the
     name of the tape drive as defined in  st.conf (name), Vendor
     ID and model  (product),  ID  (vid),  type  of  tape  device
     (type),  block size  (bsize), drive options  (options), max-
     imum read retry count (maxrretries),  maximum  write  retry
     count (maxwretries), densities supported by the drive (den-
     sities),   and   default   density   of   the   tape   drive
     (defaultdensity).


     The MTIOCGETPOS ioctl returns the current tape  position  of
     the  drive.  It  is returned in struct tapepos as defined in
     /usr/include/sys/scsi/targets/stdef.h.



SunOS 5.11          Last change: 15 Sep 2007                   13






Ioctl Requests                                           mtio(7I)



     The  MTIOCRESTPOS ioctl restores a saved position  from  the
     MTIOCGETPOS.

  Persistent Error Handling IOCTLs and Asynchronous  Tape  Opera-
     tions
     MTIOCPERSISTENT          enables/disables  persistent  error
                              handling


     MTIOCPERSISTENTSTATUS    queries for persistent  error  han-
                              dling


     MTIOCLRER               clears persistent error handling


     MTIOCGUARANTEDORDER     checks  whether  driver  guarantees
                              order of I/O's



     The MTIOCPERSISTENT ioctl  enables  or  disables  persistent
     error  handling.  It  takes  as  an argument a pointer to an
     integer that turns  it  either  on  or  off.  If  the  ioctl
     succeeds, the desired operation was successful. It will wait
     for all outstanding I/O's to complete  before  changing  the
     persistent error handling status. For example,

       int on = 1;
       ioctl(fd, MTIOCPERSISTENT, &on);
       int off = 0;
       ioctl(fd, MTIOCPERSISTENT, &off);



     The MTIOCPERSISTENTSTATUS ioctl  enables  or  disables  per-
     sistent error handling. It takes as an argument a pointer to
     an integer inserted by the driver. The integer can be either
     1  if  persistent error handling is 'on', or 0 if persistent
     error handling is 'off'. It will not  wait  for  outstanding
     I/O's. For example,

       int query;
       ioctl(fd, MTIOCPERSISTENTSTATUS, &query);



     The MTIOCLRER ioctl clears persistent  error  handling  and
     allows  tape  operations  to  continual normally. This ioctl
     requires no argument and will always succeed, even  if  per-
     sistent  error  handling  has not been enabled. It will wait
     for any outstanding I/O's before it clears the error.



SunOS 5.11          Last change: 15 Sep 2007                   14






Ioctl Requests                                           mtio(7I)



     The MTIOCGUARANTEDORDER ioctl is used to determine  whether
     the  driver guarantees the order of I/O's. It takes no argu-
     ment.  If  the  ioctl  succeeds,  the  driver  will  support
     guaranteed  order. If the driver does not support guaranteed
     order, then it should not be used for asynchronous I/O  with
     libaio.  It  will  wait  for any outstanding I/O's before it
     returns. For example,

       ioctl(fd, MTIOCGUARANTEDORDER)



     See the Persistent Error Handling subsection above for  more
     information on persistent error handling.

  Asynchronous and State Change IOCTLS
     MTIOCSTATE    This ioctl  blocks  until  the  state  of  the
                   drive,  inserted  or  ejected, is changed. The
                   argument is a pointer to a  mtiostate,  enum,
                   whose  possible enumerations are listed below.
                   The initial value should be  either  the  last
                   reported  state  of  the  drive, or MTIONONE.
                   Upon return, the enum pointed to by the  argu-
                   ment  is updated with the current state of the
                   drive.


       enum mtiostate {
       MTIONONE      /* Return tape's current state */
       MTIOEJECTED   /* Tape state is "ejected" */
       MTIOINSERTED  /* Tape state is "inserted" */
       ;



     When using asynchronous operations, most  ioctls  will  wait
     for  all  outstanding  commands  to complete before they are
     executed.

  IOCTLS for Multi-initiator Configurations
     MTIOCRESERVE         reserve the tape drive


     MTIOCRELEASE         revert back to the default behavior  of
                          reserve on open/release on close


     MTIOCFORCERESERVE    reserve  the  tape  unit  by   breaking
                          reservation held by another host






SunOS 5.11          Last change: 15 Sep 2007                   15






Ioctl Requests                                           mtio(7I)



     The MTIOCRESERVE ioctl reserves the tape drive such that  it
     does  not  release the tape drive at close. This changes the
     default behavior of releasing the device upon close. Reserv-
     ing  the  tape drive that is already reserved has no effect.
     For example,


     ioctl(fd, MTIOCRESERVE);


     The MTIOCRELEASE ioctl reverts back to the default  behavior
     of reserve on open/release on close operation, and a release
     will occur during the next close. Releasing the  tape  drive
     that is already released has no effect. For example,


     ioctl(fd, MTIOCRELEASE);


     The MTIOCFORCERESERVE ioctl breaks  a  reservation  held  by
     another host, interrupting any I/O in progress by that other
     host, and then reserves the tape unit.  This  ioctl  can  be
     executed  only with super-user privileges. It is recommended
     to open the tape device in ONDELAY  mode  when  this  ioctl
     needs  to  be  executed,  otherwise  the  open  will fail if
     another host indeed has it reserved. For example,

       ioctl(fd, MTIOCFORCERESERVE);


  IOCTLS for Handling Tape Configuration Options
     MTIOCSHORTFMK          enables/disable support  for  writing
                            short  filemarks. This is specific to
                            Exabyte drives.


     MTIOCREADIGNOREILI     enables/disable   supress   incorrect
                            length indicator support during reads


     MTIOCREADIGNOREOFS    enables/disable support  for  reading
                            past  two  EOF  marks which otherwise
                            indicate End-Of-recording-Media (EOM)
                            in the case of 1/2" reel tape drives



     The MTIOCSHORTFMK ioctl  enables  or  disables  support  for
     short  filemarks.   This ioctl is only applicable to Exabyte
     drives which support short filemarks.  As  an  argument,  it
     takes  a  pointer to an integer.  If 0 (zero) is the  speci-
     fied integer, then long filemarks will be written. If  1  is



SunOS 5.11          Last change: 15 Sep 2007                   16






Ioctl Requests                                           mtio(7I)



     the   specified  integer, then short filemarks will be writ-
     ten. The specified tape bahavior will be in effect until the
     device is closed.


     For example:

       int on = 1;
       int off = 0;
       /* enable short filemarks */
       ioctl(fd, MTIOSHORTFMK, &on);
       /* disable short filemarks */
       ioctl(fd, MTIOCSHORTFMK, &off);



     Tape drives which do not support short filemarks will return
     an errno of  ENOTY.


     The  MTIOCREADIGNOREILI  ioctl  enables  or   disables   the
     suppress  incorrect  length  indicator (SILI) support during
     reads.  As an argument, it takes a pointer  to  an  integer.
     If  0 (zero) is the specified integer, SILI will not be used
     during reads and incorrect  length  indicator  will  not  be
     supressed.   If  1  is   the specified integer, SILI will be
     used during reads and incorrect  length  indicator  will  be
     supressed.   The  specified  tape bahavior will be in effect
     until the device is closed.


     For example:

       int on = 1;
       int off = 0;
       ioctl(fd, MTIOREADIGNOREILI, &on);
       ioctl(fd, MTIOREADIGNOREILI, &off);



     The MTIOCREADIGNOREOFS ioctl enables  or  disables  support
     for  reading  past double EOF marks which otherwise indicate
     End-Of-recorded-media (EOM) in the case of  1/2"  reel  tape
     drives.   As  an argument, it takes a pointer to an integer.
     If 0 (zero) is the specified integer, then double EOF  marks
     indicate  End-Of-recodred-media (EOD). If 1 is the specified
     integer, the double EOF marks no longer indicate  EOM,  thus
     allowing  applications  to read past two EOF marks.  In this
     case it is the responsibility of the application  to  detect
     end-of-recorded-media  (EOM).   The specified  tape bahavior
     will be in effect until the device is closed.




SunOS 5.11          Last change: 15 Sep 2007                   17






Ioctl Requests                                           mtio(7I)



     For example:

       int on = 1;
       int off = 0;
       ioctl(fd, MTIOREADIGNOREOFS, &on);
       ioctl(fd, MTIOREADIGNOREOFS, &off);



     Tape drives other than 1/2" reel tapes will return an  errno
     of  ENOTY.

EXAMPLES
     Example 1 Tape Positioning and Tape Drives


     Suppose you have written three files  to  the  non-rewinding
     1/2" tape device, /dev/rmt/0ln, and that you want to go back
     and dd(1M) the second file off the tape. The commands to  do
     this are:


       mt -F /dev/rmt/0lbn bsf 3
       mt -F /dev/rmt/0lbn fsf 1
       dd if=/dev/rmt/0ln



     To accomplish the same tape positioning in a C program, fol-
     lowed by a get status ioctl:


       struct mtop mtcommand;
       struct mtget mtstatus;
       mtcommand.mtop = MTBSF;
       mtcommand.mtcount = 3;
       ioctl(fd, MTIOCTOP, &mtcommand);
       mtcommand.mtop = MTFSF;
       mtcommand.mtcount = 1;
       ioctl(fd, MTIOCTOP, &mtcommand);
       ioctl(fd, MTIOCGET, (char *)&mtstatus);



     or


       mtcommand.mtop = MTNBSF;
       mtcommand.mtcount = 2;
       ioctl(fd, MTIOCTOP, &mtcommand);
       ioctl(fd, MTIOCGET, (char *)&mtstatus);




SunOS 5.11          Last change: 15 Sep 2007                   18






Ioctl Requests                                           mtio(7I)



     To get information about the tape drive:


       struct mtdrivetype mtdt;
       struct mtdrivetyperequest mtreq;
       mtreq.size = sizeof(struct mtdrivetype);
       mtreq.mtdtp = &mtdt;
       ioctl(fd, MTIOCGETDRIVETYPE, &mtreq);


FILES
     /dev/rmt/[][]


     Where density can be  l,  m,  h,  u/c  (low,  medium,  high,
     ultra/compressed, respectively), the BSD behavior  option is
     b, and the no rewind  option is n.


     For example, /dev/rmt/0hbn specifies unit 0,  high  density,
     BSD behavior and no rewind.

SEE ALSO
     mt(1),   tar(1),   dd(1M),   open(2),   read(2),   write(2),
     aioread(3C), aiowrite(3C), ar.h(3HEAD), st(7D)


     1/4 Inch Tape Drive Tutorial



























SunOS 5.11          Last change: 15 Sep 2007                   19



OpenSolaris man pages main menu

Contact us      |       About us      |       Term of use      |       Copyright © 2000-2010 MyWebUniversity.com ™