Provided by: manpages-es_1.55-10_all bug

NOMBRE

       st - dispositivo de cinta magnetica SCSI

SINOPSIS

       #include <sys/mtio.h>

       int ioctl(int fd, int request [, (void *)arg3]);
       int ioctl(int fd, MTIOCTOP, (struct mtop *)mt_cmd);
       int ioctl(int fd, MTIOCGET, (struct mtget *)mt_status);
       int ioctl(int fd, MTIOCPOS, (struct mtpos *)mt_pos);

DESCRIPCI'ON

       El  manejador  (driver) st proporciona la interfaz para una variedad de
       dispositivos de cinta magnetica SCSI. Actualmente, toma el  control  de
       todos  los  dispositivos  detectados  de  tipo "acceso secuencial".  El
       manejador st emplea el numero mayor de dispositivo 9.

       Cada dispositivo utiliza ocho numeros menores de dispositivo. Los cinco
       bits  mas bajos en los numeros menores se asignan secuencialmente en el
       orden en que se detectan. Los numeros menores se pueden agrupar en  dos
       conjuntos  de  cuatro  numeros: los numeros menores de dispositivo (con
       autorebobinado) principales, n,  y  los  numeros  de  dispositivo  "sin
       rebobinado",  (n+128).   A  los  dispositivos  abiertos que utilicen el
       numero de dispositivo principal se les enviara una orden REWIND  cuando
       se  cierren.   A  los  dispositivos  abiertos que utilicen el numero de
       dispositivo "sin rebobinado" no se les enviara esa orden.  (Dese cuenta
       que  usar  un  dispositivo  con autorebobinado para posicionar la cinta
       con, por ejemplo, mt no produce  el  resultado  deseado:  la  cinta  se
       rebobina  despues de la orden mt y la orden siguiente comienza desde el
       principio de la cinta).

       Dentro de cada grupo,  hay  disponibles  cuatro  numeros  menores  para
       definir  dispositivos con diferentes caracteristicas (tamano de bloque,
       compresion, densidad, etc.).  Cuando  el  sistema  arranca,  solo  esta
       disponible  el  primer dispositivo. Los otros tres se activan cuando se
       definen las carcteristicas por defecto (ver mas abajo). (Cambiando  las
       constantes  en  tiempo de compilacion, es posible cambiar el equilibrio
       entre el numero maximo de unidades de cinta  y  el  numero  de  numeros
       menores  para cada unidad.  La asignacion por defecto permite controlar
       32 dispositivos de cinta. Por ejemplo, es posible  controlar  hasta  64
       unidades de cinta con 2 numeros menores para diferentes opciones).

       Normalmente los dispositivos se crean con:
              mknod -m 666 /dev/st0 c 9 0
              mknod -m 666 /dev/st0l c 9 32
              mknod -m 666 /dev/st0m c 9 64
              mknod -m 666 /dev/st0a c 9 96
              mknod -m 666 /dev/nst0 c 9 128
              mknod -m 666 /dev/nst0l c 9 160
              mknod -m 666 /dev/nst0m c 9 192
              mknod -m 666 /dev/nst0a c 9 224

       No existe el dispositivo de bloque correspondiente.

       El manejador usa un buffer interno que tiene que ser lo suficientemente
       grande para contener, al menos, un bloque de la cinta. En  los  nucleos
       anteriores  al  2.1.121,  el buffer se reserva como un bloque contiguo.
       Esto limita el tamano de bloque al mayor bloque contiguo de memoria que
       el  codigo  de  asignacion  de  memoria  del nucleo puede proporcionar.
       Actualmente, el limite es de 128KB para  arquitecturas  de  32  bits  y
       256KB  para  arquitecturas  de  64  bits.  En  nucleos  posteriores  el
       manejador reserva el buffer en  varias  partes  si  es  necesario.  Por
       defecto,  el  numero  maximo de partes es de 16.  Esto significa que el
       tamano maximo  de  bloques  es  muy  grande  (2MB  si  es  posible  una
       asignacion de 16 bloques de 128KB).

       El  tamano  del  buffer interno del manejador viene determinado por una
       contante en tiempo de compilacion que se puede alterar con  una  opcion
       de inicio del nucleo.  Aparte de esto, el manejador intenta reservar un
       buffer temporal mayor en tiempo  de  ejecucion  si  es  necesario.  Sin
       embargo,  la  asignacion  en  tiempo  de  ejecucion  de grandes bloques
       contiguos de memoria puede fallar y es aconsejable no confiar demasiado
       en  la asignacion dinamica de buffers con nucleos anteriores al 2.1.121
       (esto se aplica tambien a  la  carga  por  demanda  del  manejador  con
       kerneld o kmod).

       El  manejador  no  soporta  especificamente  ninguna  marca o modelo de
       unidad de cinta. Despues  del  arranque  del  sistema  se  definen  las
       opciones  de  los  dispositivos  de  cinta  a partir del firmware de la
       unidad.  Por ejemplo, si el firmware de la unidad selecciona un modo de
       bloque  fijo,  el  dispositivo de cinta usa el modo de bloque fijo. Las
       opciones  se  pueden  cambiar  con  llamadas  explicitas  a  ioctl()  y
       permanecen activas cuando el dispositivo se cierra y se vuelve a abrir.
       La configuracion de las opciones afecta tanto al dispositivo con  auto-
       rebobinado como sin rebobinado.

       Se  pueden  indicar  diferentes opciones para los diferentes dispositos
       dentro del subgrupo de cuatro. Las opciones entran en vigor  cuando  el
       dispositivo  se  abre.  Por ejemplo, el administrador del sistema puede
       definir un dispositivo que escribe en modo de bloque fijo con un tamano
       de bloque concreto y otro que escribe en modo de bloque variable (si la
       unidad de cinta soporta ambos modos).

       El majenador soporta particiones de cinta  si  son  soportadas  por  la
       unidad.  (Dese  cuenta  que las particiones de cinta no tienen nada que
       ver con las particiones de disco. Una cinta particionada se  puede  ver
       como  varias  cintas  logicas  dentro de un mismo medio). El soporte de
       particiones se debe habilitar  con  ioctl.  La  posicion  de  cinta  se
       conserva  dentro de cada particion durante los cambios de particion. La
       particion  usada  para  las  operaciones  de  cinta  subsiguientes   se
       selecciona  con  ioctl.  El cambio de particion se ejecuta junto con la
       siguiente  operacion  de  cinta  para  evitar  movimientos   de   cinta
       innecesarios.  El numero maximo de particiones en una cinta es definido
       por una constante en tiempo de compilacion (originalmente  cuatro).  El
       manejador contiene un ioctl que puede formatear una cinta con una o dos
       particiones.

       El dispositivo /dev/tape se crea normalmente como un  enlace  fisico  o
       simbolico al dispositivo de cinta predeterminado en el sistema.

TRANSFERENCIA DE DATOS

       El  manejador  soporta  tanto  el funcionamiento en modo de bloque fijo
       como en modo de bloque variable (si la unidad lo soporta). En  el  modo
       de  bloque  fijo la unidad escribe bloques del tamano especificado y el
       tamano de bloque no depende de la cantidad de bytes de las llamadas  al
       sistema  de  escritura.  En  el  modo  de bloque variable se escribe un
       bloque de cinta para cada llamada de escritura y  el  numero  de  bytes
       determina  el  tamano  del bloque de cinta correspondiente. Dese cuenta
       que los bloques en la cinta no contienen ninguna informacion  sobre  el
       modo  de  escritura: cuando se lee, lo unico importante es usar ordenes
       que acepten los tamanos de los bloques en la cinta.

       En el modo de bloque variable la cantida de bytes leidos no  tiene  que
       coincidir  exactamente  con  el  tamano  de  bloque  de la cinta. Si la
       cantidad de bytes es mayor que el siguiente  bloque  de  la  cinta,  el
       manejador  devuelve  los  datos y la funcion devuelve el tamano real de
       bloque. Si el tamano de bloque es mayor que la cantidad  de  bytes,  se
       devuelve  la  cantidad de datos solicitada desde el inicio del bloque y
       el resto del bloque se descarta.

       En el modo de bloque fijo, la  cantidad  de  bytes  a  leer  puede  ser
       arbitraria  si  se habilita el uso de buffers, o un multiplo del tamano
       de bloque de la cinta si se deshabilita el uso de buffers. Los  nucleos
       anteriores  al  2.1.121  permiten  escrituras  con  cantidades de bytes
       arbitrarias si se habilita el uso de buffers. En todos los otros  casos
       (un  nucleo  anterior  al 2.1.121 con uso de buffers deshabilitado o un
       nucleo nuevo) la cantidad de bytes a escribir debe ser un multiplo  del
       tamano de bloque de la cinta.

       Automaticamente  se  escribe  una  marca  de  fichero en la cinta si la
       ultima operacion de cinta antes de cerrar era un escritura.

       Cuando se encuentra una marca de fichero durante las  lecturas,  ocurre
       lo siguiente. Si quedan datos en el buffer cuando se encuentra la marca
       de fichero, se devuelven los  datos  del  buffer.  La  proxima  lectura
       devuelve  cero bytes. La siguiente lectura devuelve datos del siguiente
       fichero.  El final de los datos grabados  se  indica  devolviendo  cero
       bytes  para  dos  lecturas consecutivas. La tercera lectura devuelve un
       error.

IOCTLS

       El  manejador  admite  tres  peticiones  ioctl.   Las   peticiones   no
       reconocidas  por  el  manejador  st  se  pasan  al manejador SCSI.  Las
       definiciones de abajo son de /usr/include/linux/mtio.h:

   MTIOCTOP - Efectuar una operaci'on en la cinta
       Esta peticion toma un argumento de tipo (struct mtop *).  No todas  las
       unidades  de cinta admiten todas las operaciones.  El manejador retorna
       un error EIO si la unidad rechaza una operacion.

       /* Estructura para MTIOCTOP - orden de op. de cinta mag.: */
       struct mtop {
           short  mt_op;    /* operationes definidas abajo */
           int    mt_count; /* cuantas de ellas */
       };

       Operaciones de Cinta Magnetica para el uso normal de una cinta:
       MTBSF         Espacio atras sobre mt_count marcas de fichero.
       MTBSFM        Espacio  atras  sobre   mt_count   marcas   de   fichero.
                     Reposiciona la cinta a la parte EOT de la ultima marca de
                     fichero.
       MTBSR         Espacio  atras  sobre  mt_count  registros  (bloques   de
                     cinta).
       MTBSS         Espacio atras sobre mt_count marcas de conjunto.
       MTCOMPRESSION Habilita la compresion de los datos de la cinta dentro de
                     la unidad  si  mt_count  no  es  cero  y  deshabilita  la
                     compresion  si  mt_count  es cero. Esta orden usa el MODO
                     pagina 15 (`MODE page 15') soportado por  la  mayoria  de
                     DATs.
       MTEOM         Ir al fin del material grabado (para anadir ficheros).
       MTERASE       Borrar cinta.
       MTFSF         Espacio atras sobre mt_count marcas de fichero.
       MTFSFM        Espacio   atras   sobre   mt_count   marcas  de  fichero.
                     Reposiciona la cinta a la parte BOT de la ultima marca de
                     fichero.
       MTFSR         Espacio   atras  sobre  mt_count  registros  (bloques  de
                     cinta).
       MTFSS         Espacio atras sobre mt_count marcas de conjunto.
       MTLOAD        Ejecuta la orden SCSI de carga. Se  dispone  de  un  caso
                     especial  para  algunos autocargadores HP. Si mt_count es
                     la constante  MT_ST_HPLOADER_OFFSET  mas  un  numero,  el
                     numero   se   envia   a   la  unidad  para  controlar  al
                     autocargador.
       MTLOCK        Bloquea la puerta de la unidad de cinta.
       MTMKPART      Formatea la cinta en una o dos particiones.  Si  mt_count
                     no  es  cero,  da  el tamano de la primera particion y la
                     segunda particion contiene  el  resto  de  la  cinta.  Si
                     mt_count  es cero, la cinta se formatea en una particion.
                     Esta orden no esta permitida para una unidad a menos  que
                     se habilite el soporte de particiones para la unidad (ver
                     MT_ST_CAN_PARTITIONS mas abajo).
       MTNOP         No op. -  vuelca  el  bufer  del  manejador  como  efecto
                     colateral.  Deberia emplearse antes de leer el estado con
                     MTIOCGET.
       MTOFFL        Rebobina y apaga la unidad.
       MTRESET       Pone la unidad en el estado inicial.
       MTRETEN       Retensiona la cinta.
       MTREW         Rebobina.
       MTSEEK        Busca y va al numero de bloque especificado en  mt_count.
                     Esta operacion requiere bien una unidad SCSI-2 que admita
                     la orden LOCATE (direccion especifica  del  dispositivo),
                     bien una unidad SCSI-1 compatible con Tandberg (Tandberg,
                     Archive Viper, Wangtek,  ...  ).   El  numero  de  bloque
                     deberia  ser  uno previamente devuelto por MTIOCPOS si se
                     utilizan direcciones especificas del dispositivo.
       MTSETBLK      Establece la longitud de bloque de  la  unidad  al  valor
                     especificado  en  mt_count.   Una longitud de bloque cero
                     pone la unidad en modo de tamano de bloque variable.
       MTSETDENSITY  Pone la densidad de la cinta segun el codigo en mt_count.
                     Los  codigos  de  densidad  soportados  por una unidad se
                     pueden encontrar en la documentacion de la unidad.
       MTSETPART     La  particion  activa  se  cambia  a  mt_count   .    Las
                     particiones se numeran a partir de cero. Esta orden no se
                     permite para una  unidad  a  menos  que  se  habilite  el
                     soporte    de    particiones    para   la   unidad   (ver
                     MT_ST_CAN_PARTITIONS mas abajo).
       MTUNLOAD      Ejecuta la orden SCSI de descarga (no expulsa la cinta).
       MTUNLOCK      Desbloquea la puerta de la unidad de cinta.
       MTWEOF        Escribe mt_count marcas de fichero.
       MTWSM         Escribe mt_count marcas de conjunto.

       Operaciones  de  Cinta  Magnetica  para  configurar  las  opciones  del
       dispositivo (a realizar por el superusuario):
       MTSETDRVBUFFER
               Establece varias opciones de la unidad y el manejador segun los
               bits codificados en mt_count.  Estas consisten en  el  modo  de
               uso  de  buffers  de  la  unidad,  13  opciones  booleanas  del
               manejador, el umbral  de  escritura  del  buffer,  valores  por
               defecto  del  tamano de bloque y de densidad y plazos de tiempo
               (solo en nucleos >= 2.1).  Una unica operacion puede afectar  a
               un  unico elemento de la lista de debajo (los booleanos cuentan
               como un elemento).

               Un valor que tenga ceros en los 4 bits mas  altos  se  empleara
               para  establecer  el  modo  de tamponamiento de la unidad.  Los
               modos de tamponamiento son:

                   0   La unidad no informara del estado GOOD  en  ordenes  de
                       escritura  hasta  que  los bloques de datos se escriban
                       realmente en el material magnetico.
                   1   La unidad puede devolver un estado GOOD en  ordenes  de
                       escritura  tan  pronto  como  todos  los datos se hayan
                       transferido al bufer interno de la unidad.
                   2   La unidad puede devolver un estado GOOD en  ordenes  de
                       escritura  tan pronto como (a) todos los datos se hayan
                       transferido al bufer interno del manejador, y (b) todos
                       los  datos  en  buferes,  provinientes  de  iniciadores
                       diferentes, hayan sido bien  escritos  en  el  material
                       magnetico.

               Para  controlar  el  umbral  de escritura, el valor en mt_count
               debe incluir la constante MT_ST_WRITE_THRESHOLD aplicandole  el
               operador  de bits O inclusivo con un numero de bloque en los 28
               bits de mas bajo orden.  El  numero  de  bloque  se  refiere  a
               bloques  de  1024  bytes,  no  al tamano de bloque fisico de la
               cinta.  El umbral no puede exceder el tamano del bufer  interno
               del manejador (vea DESCRIPCI'ON, arriba).

               Para  activar  y  desactivar las opciones booleanas el valor en
               mt_count debe incluir una  de  las  constantes  MT_ST_BOOLEANS,
               MT_ST_SETBOOLEANS, MT_ST_CLEARBOOLEANS o MT_ST_BOOLEANS operada
               con un O  logico  inclusivo  a  nivel  de  bits  con  cualquier
               combinacion de las siguientes opciones, segun se desee.  Usando
               MT_ST_BOOLEANS se pueden asignar a  las  opciones  los  valores
               definidos  en  los bits correspondientes. Con MT_ST_SETBOOLEANS
               se  pueden  configurar  las  opciones  de  forma  selectiva   y
               selectivamente borradas con MT_ST_DEFBOOLEANS.

               Las  opciones  por  defecto  para  un  dispositivo  de cinta se
               configuran con MT_ST_DEFBOOLEANS. Un dispositivo  de  cinta  no
               activo  (por ejemplo, un dispositivo con numero menor 32 o 160)
               se activa cuando  sus  opciones  por  defecto  se  definen  por
               primera  vez.  Un  dispositivo activado herenda del dispositivo
               activado durante  el  arranque  las  opciones  no  configuradas
               explicitamente.

               Las opciones booleanas son:

               MT_ST_BUFFER_WRITES  (Por omision: verdad)
                      Todas  las  operaciones  de  escritura  van  a traves de
                      buferes en el modo de bloque fijo.  Si  esta  opcion  es
                      falsa  y  la  unidad  emplea  un  tamano de bloque fijo,
                      entonces todas las operaciones de escritura deben ser un
                      multiplo  del tamano de bloque. Esta opcion debe ponerse
                      como  falsa  para   escribir   confiablemente   archivos
                      multivolumenes.
               MT_ST_ASYNC_WRITES  (Por omision: verdad)
                      Cuando   esta  opcion  es  verdad,  las  operaciones  de
                      escritura regresan inmediatamente sin  esperar  que  los
                      datos  se  transfieran a la unidad si los datos caben en
                      el  bufer  del  manejador.   El  umbral   de   escritura
                      determina cuan lleno debe estar el bufer antes de que se
                      de una nueva orden de escritura SCSI.   Cualquier  error
                      devuelto  por  la unidad se mantendra en espera hasta la
                      siguiente operacion.   Esta  opcion  debe  ponerse  como
                      falsa     para    escribir    confiablemente    archivos
                      multivolumenes.
               MT_ST_READ_AHEAD  (Por omision: verdad)
                      Esta opcion hace que el manejador proporcione  un  bufer
                      para  la lectura, y lectura por adelantado en el modo de
                      bloque fijo.  Si esta opcion es falsa y la unidad emplea
                      un tamano de bloque fijo, entonces todas las operaciones
                      de lectura deben ser para  un  multiplo  del  tamano  de
                      bloque.
               MT_ST_TWO_FM  (Por omision: falso)
                      Esta  opcion  modifica  el  comportamiento del manejador
                      cuando  un  fichero  se  cierra.  La  accion  normal  es
                      escribir  una  simlpe  marca de fichero. Si la opcion es
                      verdad el manejador escribira dos marcas  de  fichero  y
                      hara un espacio atras sobre el segundo.

                      Nota:  Esta  opcion  no  deberia  ponerse  a verdad para
                      unidades de  cinta  QIC  puesto  que  son  incapaces  de
                      sobreescribir  una  marca  de  fichero.   Estas unidades
                      detectan el fin de datos grabados mirando si  hay  cinta
                      en  blanco en vez de dos marcas de fichero consecutivas.
                      La  mayoria  de  las  otras  unidades  actuales  tambien
                      detectan  el final de los datos grabados y el uso de dos
                      marcas de  fichero  es  normalmente  necesario  solo  al
                      intercambiar cintas con algunos otros sistemas.

               MT_ST_DEBUGGING  (Por omision: falso)
                      Esta  opcion  activa  varios  mensajes de depuracion del
                      manejador (solo es efectiva si se compilo la unidad  con
                      DEBUG definida a un valor no cero).
               MT_ST_FAST_EOM  (Por omision: falso)
                      Esta  opcion  hace  que  la  operacion  MTEOM  se  envie
                      directamente a la unidad, acelerando  potencialmente  la
                      operacion pero haciendo que el manejador pierda la pista
                      del numero de fichero en curso normalmente devuelto  por
                      la  peticion  MTIOCGET.   Si  MT_ST_FAST_EOM es falso el
                      manejador respondera a una peticion MTEOM saltando hacia
                      adelante sobre los ficheros.
               MT_ST_AUTO_LOCK (Por omision: falso)
                      Cuando  esta opcion es verdad, la puerta de la unidad se
                      bloquea cuando se abre el dispositivo  y  se  desbloquea
                      cuando se cierra.
               MT_ST_DEF_WRITES (Por omision: falso)
                      Las   opciones   de   cinta  (tamano  de  bloque,  modo,
                      compresion,  etc.)  pueden  cambiar  al  cambiar  de  un
                      dispositivo  ligado  a  una  unidad  a  otro dispositivo
                      ligado a la misma unidad dependiendo de como se  definan
                      los  dispositivos.   Esta  opcion  define  cuando  es el
                      manejador el que fuerza los cambios usando ordenes  SCSI
                      y  cuando se confia en las capacidades del autodeteccion
                      de las unidades. Si esta opcion es falsa,  el  manejador
                      envia  inmediatamente  ordenes  SCSI cuando se cambia el
                      dispositivo. Si  la  opcion  es  verdad,  no  se  envian
                      ordenes  SCSI  hasta  que  se solicite una escritura. En
                      este caso se permite al firmware de la  unidad  detectar
                      la  estructura  de  la  cinta al leer y solo se usan las
                      ordenes SCSI para asegurarse de que una cinta se escribe
                      segun la especificacion correcta.
               MT_ST_CAN_BSR (Por omision: falso)
                      Algunas  veces, cuando se usa lectura por adelantado, se
                      debe retrocer la cinta a la posicion correcta cuando  se
                      cierra el dispositivo y, para este proposito, se utiliza
                      la orden SCSI para retrocer sobre los registros. Algunas
                      unidades  mas  antiguas no pueden procesar esta orden de
                      manera fiable y se puede usar esta opcion para mandar al
                      manejador  no  usar la orden. El resultado final es que,
                      con lectura por adelantado y el modo de bloque fijo,  la
                      cinta  podria  no estar correctamente posicionada dentro
                      de un fichero cuando el dispositivo se cierra.
               MT_ST_NO_BLKLIMS (Por omision: falso)
                      Algunas unidades no aceptan la  orden  SCSI  READ  BLOCK
                      LIMITS.  Si se usa esto, el manejador no usara la orden.
                      El inconveniente es que el manejador no puede  comprobar
                      antes   de   enviar  ordenes  si  el  tamano  de  bloque
                      seleccionado es aceptable por la unidad.
               MT_ST_CAN_PARTITIONS (Por omision: falso)
                      Esta opcion habilita el soporte  de  varias  particiones
                      dentro  de  una  cinta.  La opcion se aplica a todos los
                      dispositivos ligados a la unidad.
               MT_ST_SCSI2LOGICAL (Default: false)
                      Esta opcion obliga al manejador a usar  las  direcciones
                      logicas  de  bloques  definidas en el estandar SCSI-2 al
                      realizar la busqueda y comunicar operaciones (tanto  con
                      la  orden  MTSEEK  como  con  MTIOCPOS  y  al cambiar la
                      particion de la  cinta).  En  otro  caso,  se  usan  las
                      direcciones   especificas   del   dispositivo.   Es  muy
                      recomendable activar esta opcion si  la  unidad  soporta
                      direcciones  logicas  ya  que  tambien cuentan marcas de
                      fichero. Hay  algunos  dispositivos  que  solo  soportan
                      direcciones logicas de bloque.
               MT_ST_SYSV (Por omision: falso)
                      Cuando  se  habilita  esta  opcion,  los dispositivos de
                      cinta usan la semantica de SystemV. En  caso  contrario,
                      se  usa  la  semantica BSD. La diferencia mas importante
                      entre  ambas  semanticas  es  que   ocurre   cuando   un
                      dispositivo  utilizado  para  lectura  se  cierra: en la
                      semantica  SYSV  la  cinta  se  avanza  hasta  pasar  la
                      siguiente  marca de fichero si esto no ha ocurrido ya al
                      usar el dispositivo. En la semantica BSD la posicion  de
                      la cinta no cambia.
               EJEMPLO
                      struct mtop mt_cmd;
                      mt_cmd.mt_op = MTSETDRVBUFFER;
                      mt_cmd.mt_count = MT_ST_BOOLEANS |
                                 MT_ST_BUFFER_WRITES |
                                 MT_ST_ASYNC_WRITES;
                      ioctl(fd, MTIOCTOP, &mt_cmd);

               El  tamano  de  bloque por defecto para un dispositivo se puede
               configurar con MT_ST_DEF_BLKSIZE y el codigo  de  densidad  por
               defecto  se  puede configurar con MT_ST_DEFDENSITY. Los valores
               para los parametros se operan con un O logico con el codigo  de
               operacion.

               Con  los nucleos 2.1.x y posteriores, los valores de los plazos
               de tiempo  (timeout)  se  pueden  configurar  con  la  suborden
               MT_ST_SET_TIMEOUT  operado  con  un  O  logico  con el plazo de
               tiempo en segundos.  El plazo largo de tiempo (usado  para  los
               rebobinados  y otras ordenes que pueden tardar mucho tiempo) se
               puede configurar con MT_ST_SET_LONG_TIMEOUT.  Los  valores  por
               defecto  del  nucleo son muy grandes para asegurarse de que una
               orden exitosa no sera cancelada para ninguna unidad.  Debido  a
               esto,  el manejador puede parecer atascado aun cuando solo este
               esperando a que se cumpla el plazo de tiempo. Estas ordenes  se
               pueden  usar para configurar mas valores utiles para una unidad
               especifica.  Los  plazos  de  tiempo   configurados   para   un
               dispostivo  se  aplican  a  todos los dispositivos ligados a la
               misma unidad.

   MTIOCGET - Obtiene el estado
       Esta peticion toma un argumento de tipo (struct mtget *).

       /* estructura para MTIOCGET - orden estado de cinta mag */
       struct mtget {
           long   mt_type;
           long   mt_resid;
           /* los ss. registros son dependientes del dispositivo */
           long   mt_dsreg;
           long   mt_gstat;
           long   mt_erreg;
           /* Los ss. 2 campos no se usan siempre */
           daddr_t          mt_fileno;
           daddr_t          mt_blkno;
       };

       mt_type    El fichero de cabecera define muchos valores  para  mt_type,
                  pero el manejador actual informa solo de los tipos genericos
                  MT_ISSCSI1  (cinta  generica  SCSI-1)  y  MT_ISSCSI2  (cinta
                  generica SCSI-2).
       mt_resid   contiene el numero de particion actual de la cinta.
       mt_dsreg   informa  de los valores actuales de la unidad para el tamano
                  de bloque (en los 24 bits mas bajos) y para la densidad  (en
                  los  8  bits  mas  altos).  Estos campos estan definidos por
                  MT_ST_BLKSIZE_SHIFT,                     MT_ST_BLKSIZE_MASK,
                  MT_ST_DENSITY_SHIFT, y MT_ST_DENSITY_MASK.
       mt_gstat   da   informacion   de  estado  generica  (independiente  del
                  dispositivo).  El fichero de  cabecera  define  macros  para
                  comprobar estos bits de estado:
                  GMT_EOF(x):  La  cinta esta posicionada justo tras una marca
                      de fichero (siempre falso tras una operacion MTSEEK).
                  GMT_BOT(x): La  cinta  esta  posicionada  al  principio  del
                      primer   fichero   (siempre  falso  tras  una  operacion
                      MTSEEK).
                  GMT_EOT(x): Una operacion de cinta ha alcanzado el Final  de
                      Cinta fisico.
                  GMT_SM(x):  La  cinta  esta  posicionada  actualmente en una
                      marca de conjunto  (siempre  falso  tras  una  operacion
                      MTSEEK).
                  GMT_EOD(x):  La  cinta  esta  posicionada  al final de datos
                      grabados.
                  GMT_WR_PROT(x): La unidad esta protegida de escritura.  Para
                      algunas  unidades  esto  tambien puede significar que no
                      admite escribir en el tipo de medio fisico actual.
                  GMT_ONLINE(x): El ultimo open() encontro a la unidad con una
                      cinta puesta y lista para la operacion.
                  GMT_D_6250(x), GMT_D_1600(x), GMT_D_800(x): Esta informacion
                      de estado "generica" informa de la densidad actual  para
                      unidades de cinta de 9 pistas y 1/2 in. solamente.
                  GMT_DR_OPEN(x): La unidad no tiene una cinta puesta.
                  GMT_IM_REP_EN(x):  Modo  de  informe  inmediato. Este bit se
                      activa si no hay garantias de que  los  datos  se  hayan
                      escrito  fisicamente  en  la  cinta cuando la llamada de
                      escritura termina. Se  le  asigna  el  valor  cero  solo
                      cuando  el  manejador no usa buffers para los datos y la
                      unidad no esta configurada para usar buffers de datos.
       mt_erreg   El unico campo definido en mt_erreg es el numero de  errores
                  recuperados en los 16 bits de mas bajo orden (como se define
                  por MT_ST_SOFTERR_SHIFT  y  MT_ST_SOFTERR_MASK).   Debido  a
                  inconsistencias  en la forma en que las unidades informan de
                  errores recuperados, este numero a menudo  no  es  mantenido
                  (la  mayoria  de  las  unidades no informan, por defecto, de
                  errores leves pero esto se puede cambiar con una orden  SCSI
                  MODE SELECT).
       mt_fileno  devuelve  el  numero de fichero actual (empezando por cero).
                  Este valor se pone a -1  cuando  el  numero  de  fichero  se
                  desconoce (p. ej. despues de MTBSS o MTSEEK).
       mt_blkno   da  el  numero  de  bloque  (empezando  por cero) dentro del
                  fichero actual.  Este valor se pone a -1 cuando el numero de
                  bloque  se  desconoce  (p.  ej.  despues  de MTBSF, MTBSS, o
                  MTSEEK).

   MTIOCPOS - Obtener la posici'on en la cinta
       Esta peticion toma un argumento de tipo (struct mtpos *) y devuelve  la
       nocion que tiene el manejador del numero de bloque de cinta actual, que
       no es el mismo que mt_blkno devuelto por MTIOCGET.   Esta  unidad  debe
       ser  de  tipo  SCSI-2  y debe admitir la orden READ POSITION (direccion
       especifica del dispositivo) o una  unidad  SCSI-1  compatible  Tandberg
       (Tandberg, Archive Viper, Wangtek, ... ).

       /* estructura para MTIOCPOS - orden obtener posicion cinta mag. */
       struct     mtpos {
           long   mt_blkno; /* numero de bloque en curso */
       };

VALOR DEVUELTO

       EIO           La operacion pedida no ha podido completarse.

       ENOSPC        Una  operacion de escritura no pudo completarse porque la
                     cinta llego al final del material magnetico.

       EACCES        Se intento escribir o borrar  una  cinta  protegida  para
                     escritura.  (Este error no se detecta durante open().)

       EFAULT        Los  parametros  de  la  orden  apuntan  a memoria que no
                     pertenece al proceso invocador.

       ENXIO         Durante la apertura, el dispositivo de cinta no existe.

       EBUSY         El dispositivo ya esta en uso  o  el  manejador  ha  sido
                     incapaz de reservar un bufer.

       EOVERFLOW     Se  ha  intentado  leer  o escribir un bloque de longitud
                     variable que es mayor que el bufer interno del manejador.

       EINVAL        Una llamada a ioctl() tenia un argumento incorrecto, o un
                     tamano de bloque pedido era ilegal.

       ENOSYS        ioctl() desconocido.

       EROFS         Se   ha  intentado  realizar  una  operacion  `open'  con
                     O_WRONLY o O_RDWR cuando  la  cinta  de  la  unidad  esta
                     protegida contra escritura.

FICHEROS

       /dev/st*  : dispositivos de cinta SCSI con autorebobinado
       /dev/nst* : dispositivos de cinta SCSI sin rebobinado

AUTOR

       El    manejador    ha    sido    escrito    por    by    Kai   Makisara
       (Kai.Makisara@metla.fi) a  partir  del  manejador  escrito  por  Dwayne
       Forsyth. Varias otras personas tambien han contribuido al manejador.

V'EASE TAMBI'EN

       mt(1)

       El  fichero README.st de los fuentes del nucleo contiene la informacion
       mas reciente del manejador y sus posibilidades de configuracion.

OBSERVACIONES

       1. Cuando se intercambian datos entre sistemas,  ambos  sistemas  deben
       coincidir en el tamano fisico del bloque de la cinta. Los parametros de
       una unidad despues del arranque no son,  con  frecuencia,  los  que  la
       mayoria  de  los  sistemas  operativos  usan con estos dispositivos. La
       mayoria de los sistemas usan unidades en modo de bloque variable si  la
       unidad soporta ese modo. Esto es aplicable a la mayoria de las unidades
       modernas, incluyendo DATs, unidades de  recorrido  helicoidal  de  8mm,
       DLTs,  etc.  Puede ser aconsejable usar estas unidades en modo variable
       tambien en Linux (es decir, use MTSETBLK o MTSETDEFBLK en  el  arranque
       del  sistema  para establecer el modo), al menos cuando se intercambien
       datos con sistemas externos. El inconveniente de esto es  que  se  debe
       usar  un tamano de bloque de cinta bastante largo para obtener tasas de
       transferencia de  datos  aceptables  sobre  el  bus  SCSI.   2.  Muchos
       programas  (por ejemplo, tar) permiten al usuario especificar el tamano
       de bloque en la linea de ordenes. Dese cuenta  que  esto  determina  el
       tamano  fisico  del  bloque  en  la  cinta  solo  en  el modo de bloque
       variable.

       3. Para usar unidades de cinta SCSI, el manejador basico  de  SCSI,  el
       manejador  de  un  adaptador  SCSI  y el manejador de cintas SCSI deben
       estar bien configurados dentro del nucleo o cargados como  modulos.  Si
       el  manejador  de  cintas  SCSI no esta presente, se reconoce la unidad
       pero el soporte de cinta descrito en esta pagina no esta disponible.

       4.   El   manejador   escribe   los   mensajes   de    error    a    la
       consola/registro(log).   Los codigos SENSE escritos en algunos mensajes
       se traducen automatica a texto si se han habilitado en la configuracion
       del nucleo los mensajes SCSI prolijos.

COPYRIGHT

       Copyright (C) 1995 Robert K. Nichols.
       Copyright (C) 1999 Kai Makisara.

       Se  da  permiso para hacer y distribuir copias identicas de este manual
       supuesto que la nota de copyright y esta de  permiso  se  preservan  en
       todas  las  copias.   El fichero de cabecera del codigo fuente contiene
       permisos adicionales.