Provided by: manpages-pt_20040726-5_all bug

NOME

       st - Dispositivo de Fita SCSI

SINOPSE

       #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)

DESCRIÇÃO

       O driver st provê a interface para vários dispositivos de fita SCSI.  Atualmente, o driver controla todos
       os dispositivos detetados do tipo “acesso-seqüencial.”  O driver st usa o número de dispositvo maior 9.

       Cada  dispositivo  usa  oito  números  menores.  Os  cinco  bits  de  menor ordem nos números menores são
       atribuidos seqüencialmente na ordem em que são detetados. Os números menores podem ser agrupados em  dois
       conjuntos  de  quatro  números.  os  números  menores  principais (auto-rebobinamento), n, e um número de
       dispositivo “sem rebobinamento” números de dispositivo, (n+  128).   Os  dispositivos  abertos  usando  o
       número  principal  receberão  o  comando  REWIND  que  os rebobinará quando forem fechados.  Dispositivos
       abertos usando o ”número de dispositvo“sem rebobinamento.  (Observe que usando um dispositivo  com  auto-
       rebobinamento,  ao  posicionar a fita, por exemplo, o mt não dá o resultado desejado: a fita é rebobinada
       depois do comando mt e o próximo comando atua a partir do inicio da fita).

       Em cada grupo, quatro números menores estão disponíveis para  definir  dispositivos  com  características
       diferentes  (tamanho  do  bloco,  compressão, densidade, etc). Quando o sistema inicia, apenas o primeiro
       dispositivo está disponível. Os outros três são ativados quando as características padrões são  definidas
       (veja  abaixo).  (Alterando as constantes durante a compilação, é possível mudar o balanço entre o número
       máximo de unidades de fita e o número de menor número de dispositivo para cada unidade. A alocação padrão
       permite controlar 32 unidades de fita.  Por exemplo, é  possível  controlar  até  64  unidades  com  dois
       números menores para diferentes opções).

       Os dispositivos são tipicamente criados por:
              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

       Não há dispositivos de bloco correspondentes.

       O  driver usa um buffer interno que tem que ter espaço suficiente para manter no mínimo um bloco de fita.
       No Linux anterior ao 2.1.121, o buffer é alocado como um bloco contíguo. Isto limita o tamanho  do  bloco
       para  o  maior  bloco  contíguo  de memória que o alocador pode prover.  O limite atual é de 128kB para a
       arquitetura de 32 bits e 256kB para a arquitetura de 64 bits. Nas novas versões do Linux o driver aloca o
       buffer em várias partes se necessário. Por padrão, o número máximo de partes é 16. Isto significa  que  o
       tamanho máximo do bloco é muito grande (2 MB se alocado 16 blocos de 128kB).

       O  tamanho  do  buffer interno do driver é determinado por uma constante em tempo de compilação, que pode
       ser sobrescrita com uma opção na inicialização do kernel do Linux.  Em adição  a  isto,  o  driver  tenta
       alocar  um  buffer  temporário  grande  em tempo de execução se necessário. Porém, a alocação em tempo de
       execução de grandes blocos contíguos de memória pode falhar,  portanto,  não  confie  muito  em  alocação
       dinâmica  de  buffer  em  versões anteriores a 2.1.121 (isto também se aplica em carga dinâmica de driver
       usando o kerneld e kmod).

       O driver não suporta especificamente qualquer marca ou modelo de unidade de fita. Depois  que  o  sistema
       inicia,  as  opções  do  dispositivo  de  fita  são definidas pelo firmware da unidade. Por exemplo, se o
       firmware seleciona o modo de blocagem fixa, a unidade de fita  usará  este  modo.  As  opções  podem  ser
       alteradas com chamadas ioctl() explícitas e mantidas em efeito quando o dispositivo é fechado e reaberto.
       As opções definidas afetam, tanto os dispositivos com auto-rebobinamento, quanto os sem rebobinamento.

       Opções  diferentes podem ser especificadas para dispositivos diferentes, dentro de um subgrupo de quatro.
       As opções fazem efeito quanto o dispositivo é aberto.  Por  exemplo,  o  administrador  do  sistema  pode
       definir  um  dispositivo  que  grava  em  blocos fixos com uma certa blocagem e outro que grava em blocos
       variáveis (se a unidade suportar ambos os modos).

       O driver suporta partições se a unidade de fita suportá-las. (As partições em fita não tem nada  ver  com
       as  partições  em  disco.  Uma  fita  particionada pode ser vista como várias fitas lógicas.) O suporte a
       partições tem que ser habilitado com um ioctl. A localização  da  fita  é  preservada  em  cada  partição
       através  das  alterações na partição.  A partição usada para operações subseqüentes, é selecionada com um
       ioctl. A mudança de partição é executada junto com a próxima operação para evitar movimento desnecessário
       da fita. O número máximo de partições um uma fita é definido  por  uma  constante  durante  a  compilação
       (originalmente quatro). O driver contém um ioctl que pode formatar uma fita com uma ou duas partições.

       O  dispositivo /dev/tape é geralmente criado como um vínculo símbólico ou fixo para o dispositivo de fita
       padrão no sistema.

TRANSFERÊNCIA DE DADOS

       O driver suporta operações nos modos de blocagem fixa e variável (se suportado pela unidade). No modo  de
       blocagem  fixa  a  unidade  grava  blocos  de tamanho específico e o tamanho do bloco não é dependente do
       contador de bytes gravados, usado pelas chamadas do sistema. No modo de blocagem  variável,  um  bloco  é
       gravado  para cada chamada de gravação e o contador de bytes determina o tamanho do bloco. Observe que os
       blocos na fita, não contém quaisquer informações  sobre  o  mode  de  gravação.   Durante  a  leitura,  o
       importante é usar comandos que aceitam o tamanho dos blocos gravados.

       No  modo  variável,  o  contador  de  bytes não precisa coincidir exatamente com o tamanho do bloco. Se o
       contador é maior do que o próximo bloco na fita, o driver retorna os dados e a função retorna  o  tamanho
       atual  do  bloco.  Se  o tamanho do bloco é maior do que o contador de bytes, a quantidade requisitada de
       dados é retornada a partir do inicio do bloco e o resto é descartado.

       No modo fixo, o contador de bytes lidos pode ser arbitrário se o uso de buffer estiver habilitado  ou  um
       múltiplo  do  tamanho  do bloco se o buffer estiver desabilitado. O Linux antes da versão 2.1.121 permite
       gravação com um contador de byte arbitrário, se o  buffer  estiver  habilitado.  Em  todos  os  casos,  o
       contador de bytes de gravados deve ser um múltiplo do tamanho do bloco.

       Um  marcador  de arquivo é automáticamente gravado na fita se a última operação na fita antes de fechá-la
       foi uma gravação.

       Quando um marcador de arquivo é encontrado enquanto lendo, a seguinte é comcluído.  Se  houver  dados  no
       buffer  quando  um  marcador  de  arquivo  é  encontrado, estes dados serão retornados. A próxima leitura
       retornará zero bytes. A leitura seguinte retornará os dados do próximo arquivo. O fim dos dados  gravados
       é  sinalizado pelo retorno de zero bytes durante duas leituras consecutivas. A terceira leitura retornará
       um erro.

IOCTLS

       O driver suporta três requisitos ioctl.  Os requisitos não reconhecidos pelo driver st são passados  para
       o driver SCSI As definições abaixo são do /usr/include/linux/mtio.h:

   MTIOCTOP - Executa uma operação de fita
       Este  requisito  leva  um  argumento  do  tipo  (struct mtop *).  Nem todos as unidades suportam todas as
       operações.  O driver retorna um erro EIO se a unidade rejeitar uma operação.

       /* Estrutura do MTIOCTOP - comando op de fita mag: */
       struct mtop {
           short  mt_op;    /* operações definidas abaixo */
           int    mt_count; /* quantidade delas */
       };

       Operações de fita magnéticas para uso normal:
       MTBSF         Retrocede espaços sobre mt_count marcadores de arquivos.
       MTBSFM        Retrocede espaços sobre mt_count marcadores de arquivos.  Reposiciona a fita  no  lado  EOT
                     último marcador de arquivo.
       MTBSR         Retrocede espaços sobre mt_count registros (blocos da fita).
       MTBSS         Retrocede espaços sobre mt_count setmarks.
       MTCOMPRESSION Habilita compressão de dados se mt_count não for zero e desabilita a compressão se mt_count
                     é zero. Este comando usa o MODO page 15 suportado pela maioria das fitas DATs.
       MTEOM         Vai para o final da mídia gravada (para acrescentar arquivos).
       MTERASE       Apaga a fita.
       MTFSF         Avança mt_count marcadores de arquivos.
       MTFSFM        Avança  mt_count  marcadores de arquivos.  Reposiciona a fita no lado BOT do último marcado
                     de arquivo.
       MTFSR         Avança espaços sobre mt_count registro (blocos da fita).
       MTFSS         Avança espaços sobre mt_count setmarks.
       MTLOAD        Executa o comando load SCSI. Um caso especial  está  disponível  para  alguns  carregadores
                     automáticos  HP. Se mt_count é a constante MT_ST_HPLOADER_OFFSET mais um número, o número é
                     enviando para a unidade controlar a carga automática.
       MTLOCK        Bloqueia a porta da unidade de fita.
       MTMKPART      Formata a fita em uma ou duas partições. Se mt_count não for zero,  ele  dá  o  tamanho  da
                     primeira partição e a segunda partição contém o resto da fita. Se mt_count for zero, a fita
                     é  formatada  com  um  partição.  Este comando não é permitido em uma unidade a menos que o
                     suporte a esteja habilitado (veja MT_ST_CAN_PARTITIONS abaixo).
       MTNOP         Nenhuma operação - descarrega o buffer do driver.  Ele pode ser usado antes de ler o estado
                     com MTIOCGET.
       MTOFFL        Rebobina a fita e coloca a unidade fora de linha.
       MTRESET       Reinicia a unidade.
       MTRETEN       Retensiona a fita.
       MTREW         Rebobina.
       MTSEEK        Posiciona no número de bloco especificado em mt_count.  Esta operação  requer  uma  unidade
                     SCSI-2  que  suporte  o  comando LOCATE (endereço de dispositivo específico) ou uma unidade
                     Tandberg-compatível SCSI-1 (Tandberg, Archive Viper, Wangtek, ... ).   O  número  do  bloco
                     deverá  ser  aquele  previamente  retornado  pelo  MTIOCPOS  se  o  endereço  específico do
                     dispositivo foi usado.
       MTSETBLK      Define o tamanho do bloco para o valor especificado em mt_count.  Um tamanho de zero define
                     o modo de bloco de tamanho variável.
       MTSETDENSITY  Define a densidade para o código em mt_count.  O código de densidade suportado pela unidade
                     pode ser encontrado na documentação da unidade.
       MTSETPART     A partição é alternada para mt_count .  As partições são numeradas a partir de  zero.  Este
                     comando não é permitido em uma unidade, a menos que o suporte a partições esteja habilitado
                     (veja MT_ST_CAN_PARTITIONS abaixo).
       MTUNLOAD      Executa o comando SCSI unload (não ejeta a fita).
       MTUNLOCK      Desbloqueia a porta da unidade de fita.
       MTWEOF        Grava mt_count marcadores de arquivos.
       MTWSM         Grava mt_count setmarks.

       Operações de Fita Magnética para configurar opções de dispositivo (superusuário):
       MTSETDRVBUFFER
               Define  várias  opções  de  driver e unidade de acordo com os bits codificados em mt_count.  Isto
               consiste do modo de buferização da unidade,  13  opções  Booleanas  da  unidade,  os  limites  de
               gravação  do  buffer,  padrões  para o tamanho do bloco e densidade e limites de tempo (apenas no
               Linux >= 2.1).  Uma operação simples só pode afetar um ítem na lista acima (as  opções  Booleanas
               contadas com um ítem.)

               Um  valor  zero nos 4 bits de alta órdem será usado para definir o modo de buferização da unidade
               de fita.  Os modos de buferização são:

                   0   A unidade não informará o estado GOOD nos comandos de gravação até que os blocos de dados
                       sejam gravados na mídia.
                   1   A unidade informará o estado GOOD nos comandos de  gravação  assim  que  todos  os  dados
                       tenham sido transferidos do buffer interno da unidade.
                   2   A  unidade  pode  informar o estado GOOD nos comandos de gravação assim que: (a) os dados
                       foram transferido do buffer interno da unidade  e  (b)  todos  os  dados  em  buffers  de
                       inicializadores diferentes foram gravados com sucesso para a mídia.

               Para   controlar   o   limite  de  gravação,  o  valor  em  mt_count  deve  incluir  a  constante
               MT_ST_WRITE_THRESHOLD logicamente ORed com um contador  de  bloco  nos  28  bits  inferiores.   O
               contador de bloco refere-se a blocos de 1024-byte e não ao tamanho físico dos blocos na fita.  Os
               limites não podem exceder o tamanho do buffer interno da unidade (veja DESCRIÇÃO, acima).

               Para  definir  e  limpar  as opções Booleanas o valor em mt_count deve incluir uma das constantes
               MT_ST_BOOLEANS, MT_ST_SETBOOLEANS, MT_ST_CLEARBOOLEANS ou MT_ST_DEFBOOLEANS logicamente ORed  com
               qualquer  combinação  das opções a seguir é desejável.  Usando MT_ST_BOOLEANS as opções podem ser
               definidas para valores definidos nos bits correspondentes. Com MT_ST_SETBOOLEANS as opções  podem
               ser seletivamente definidas e com MT_ST_DEFBOOLEANS seletivamente limpas.

               As  opções  padrões  para  um  dispositivo  de fita podem ser definidas com MT_ST_DEFBOOLEANS. Um
               dispositivo de fita inativo (i.e., um dispositivo com número menor 32 ou 160) é ativado quando as
               opções padrões para ele são definidas na primeira  vez.  Um  dispositivo  ativado  herda  daquele
               ativado na inicialização as opções não definidas explicitamente.

               As opções Booleanas são:

               MT_ST_BUFFER_WRITES  (Padrão: true)
                      Coloca  no  buffer todas as operações de gravação usando a blocagem fixa.  Se esta opção é
                      false e a unidade usa um bloco de tamanho fixo, então todas as operações de gravação devem
                      usar um múltiplo do tamanho do bloco.  Esta opção deve ser definida  como  falsa  para  se
                      obter uma gravação confiável em sistemas multi-volumes.
               MT_ST_ASYNC_WRITES  (Padrão: true)
                      Quando  esta  opção é verdadejra, a operação de gravação retorna imediatamente sem esperar
                      que os dados sejam transferidos para a unidade se  os  dados  estão  ajustados  dentro  do
                      buffer  da  unidade.  O limite de gravação determina quando o buffer está cheio mas depois
                      um novo comando de escrita SCSI é usado.  Quaisquer erros  relatados  pela  unidade  serão
                      retidos até a próxima operação.  Esta opção deve ser definida como falsa para se obter uma
                      gravação confiável em sistemas multi-volumes.
               MT_ST_READ_AHEAD  (Padrão: true)
                      Esta  opção faz o driver prover leitura buferizada e leitura a frente em blocos fixos.  Se
                      esta opção é false e a unidade usa um tamanho de bloco fixo, todas as operações de leitura
                      devem ser múltiplos do tamanho do bloco.
               MT_ST_TWO_FM  (Padrão: false)
                      Esta opção modifica as características do driver quando um  arquivo  é  fechado.   A  ação
                      normal  é gravar uma marca de arquivo simples.  Se esta opção é true o driver gravará duas
                      marcas de arquivo e um caracter de retrocesso sobre a última marca.

                      Nota: Esta opção não pode ser true para unidades de fita QIC uma vez que  elas  não  podem
                      sobrescrever  a  marca  de  arquivo.   Estas  unidades  detetam o final dos dados gravados
                      testando se a fita está em branco. A maioria das unidades atuais também  detetam  o  final
                      dos  dados  gravados  e  o  uso das duas marcas de arquivo são necessária apenas quando há
                      intercambio de fita com outros sistemas.

               MT_ST_DEBUGGING  (Padrão: false)
                      Esta opção ativa várias mensagens de depuração de erros do driver  (só  tem  efeito  se  o
                      driver foi compilado com DEBUG definido com valor diferente de zero).
               MT_ST_FAST_EOM  (Padrão: false)
                      Esta  opção  envia  a  operação MTEOM diretamente para a unidade, potencialmente acelera a
                      operação, mas causa perda de trilhas do número de  arquivo  atual,  normalmente  retornado
                      pela  requisição  MTIOCGET.   Se MT_ST_FAST_EOM é false o driver responderá a um requisito
                      MTEOM repassando espaços sobre o arquivo.
               MT_ST_AUTO_LOCK (Padrão: false)
                      Quando esta opção é true, a porta da unidade é bloqueada quando o dispositivo é  aberto  e
                      desbloqueada quando ele é fechado.
               MT_ST_DEF_WRITES (Padrão: false)
                      As opções da fita (tamanho do bloco, modo, compressão, etc.) pode variar quando muda-se de
                      um dispositivo vinculado a uma unidade, para outro vinculado a mesma unidade dependendo de
                      como  os  dispositivos  estão definidos. Esta opção define quando as mudanças são forçadas
                      pelo driver através de comandos SCSI e quando a unidade auto-deteta que as capacidades são
                      confiáveis. Se esta opção é false, o driver envia os comandos SCSI imediatamente quando  o
                      dispositivo  é  alterado. Se a opção é true, os comandos SCSI não são enviados até que uma
                      gravação seja requisitada. Neste caso o firmware da unidade tem permissão para  detetar  a
                      estrutura  da fita durante a leitura e os comandos SCSI são usados apenas para certificar-
                      se que a fita é gravada de acordo com a especificação correta.
               MT_ST_CAN_BSR (Padrão: false)
                      Quando a leitura a frente é usada, a fita deve algumas vezes ser rebobinada para a posição
                      correta quando o dispositivo é fechado e o comando SCSI para efetuar esta tarefa é  usado.
                      Algumas unidades antigas não podem processar este comando confiavelmente e esta opção pode
                      ser  usada para instruir o a não usá-lo. O resultado final é que, com leitura a frente e o
                      modo de bloco fixo, a fita não pode ser  corretamente  posicionada  no  arquivo  quando  o
                      dispositivo é fechado.
               MT_ST_NO_BLKLIMS (Padrão: false)
                      Algumas  unidades  não  aceitam o comando SCSI READ BLOCK LIMITS. Se ele é usado, o driver
                      não usá-o. A desvantagem é que o driver não pode checar antes de enviar os comandos  se  o
                      tamanho de bloco selecionado é aceitável pela unidade de fita.
               MT_ST_CAN_PARTITIONS (Padrão: false)
                      Esta  opção  habilita  o suporte a várias partições em uma fita.  Ela aplica-se a todos os
                      dispositivos vinculados à unidade.
               MT_ST_SCSI2LOGICAL (Padrão: false)
                      Esta opção instrui o driver a usar o endereço lógico de bloco definido  no  padrão  SCSI-2
                      durante as operações de procura e ( com os comandos MTSEEK e MTIOCPOS e durante alterações
                      na  partição).  Do  contrário  o  endereço específico do dispositivo é usado.  É altamente
                      recomendável definir esta opção se a unidade suporta os  endereços  lógicos,  porque  eles
                      também  contam  as  marcas de arquivo. Há algumas unidades que só suportam o endereçamento
                      lógico de bloco.
               MT_ST_SYSV (Padrão: false)
                      Quando esta opção é habilitada, o dispositivo de fita  usa  a  semântica  do  SystemV.  Do
                      contrário  a  do  BSD  é  usada.  A  diferença mais importante entre as semânticas é o que
                      acontece quando um dispositivo usado para leitura é fechado: na semântica SYSV  a  fita  é
                      avançada  para  a  próxima  marca  de  arquivo  se  a  mesma  não foi encontrada durante a
                      utilização do dispositivo. Na semântica BSD a posição da fita não se altera.
               EXEMPLO
                      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);

               O tamanho padrão do bloco para um  dispositivo  pode  ser  definido  com  MT_ST_DEF_BLKSIZE  e  a
               densidade  padrão  com  MT_ST_DEFDENSITY.  Uma  operação  OU  é  executada  entre  os valores dos
               parâmetros e o código da operação.

               Com o Linux 2.1.x e posteriores, os limites  de  tempo  podem  ser  definidos  com  o  subcomando
               MT_ST_SET_TIMEOUT  e  um  OU  do  tempo em segundos.  O limite longo  (usado para rebobinamento e
               outros comandos que levam muito tempo) pode ser definido com MT_ST_SET_LONG_TIMEOUT. O padrão  do
               Linux  é  muito longo para certificar-se que um comando falhou por ter excedido o limite de tempo
               em qualquer unidade. Por isso o driver pode parecer travar, mesmo que ele seja o único em espera.
               Estes comandos podem ser usados para definir valores mais práticos para unidades  específicas.  O
               limite definido para um dispositivo, aplica-se a todos que estejam vinculados a mesma unidade.

   MTIOCGET - Obtém o estado
       Esta requisição leva um argumento do tipo (struct mtget *).

       /* estrutura para MTIOCGET - comando para obter o estado da fita */
       struct mtget {
           long   mt_type;
           long   mt_resid;
           /* os registradores abaixo são dependentes do dispositivo */
           long   mt_dsreg;
           long   mt_gstat;
           long   mt_erreg;
           /* Os dois campos a seguit nem sempre são usados */
           daddr_t          mt_fileno;
           daddr_t          mt_blkno;
       };

       mt_type    Arquivo  cabeçalho  define vários valores para mt_type, mas o driver atual só informa os tipos
                  genéricos MT_ISSCSI1 (Fita SCSI-1 genérica) e MT_ISSCSI2 (Fita SCSI-2 genérica).
       mt_resid   contém o número da partição da fita atual.
       mt_dsreg   informa a definição de tamanho de bloco da unidade atual (nos 24 bits baixos) e densidade (nos
                  8 bits altos).   Estes  campos  são  definidos  por  MT_ST_BLKSIZE_SHIFT,  MT_ST_BLKSIZE_MASK,
                  MT_ST_DENSITY_SHIFT e MT_ST_DENSITY_MASK.
       mt_gstat   dá  informações genéricas do estado (independente do dispositivo).  O arquivo cabeçalho define
                  macros para testar estes bits de estado:

                  GMT_EOF(x): A fita está posicionada após a marca de arquivo (sempre false  após  uma  operação
                      MTSEEK).
                  GMT_BOT(x):  A  fita  está  posicionada  no  inicio do primeiro arquivo (sempre false após uma
                      operação MTSEEK).
                  GMT_EOT(x): Uma operação da fita alcançou o final físico da Fita.
                  GMT_SM(x): A fita está posicionada na setmark (sempre false após uma operação MTSEEK).
                  GMT_EOD(x): A fita está posicionada no final do dado gravado.
                  GMT_WR_PROT(x): A unidade está protegida contra gravação.  Para  algumas  unidades  isto  pode
                      significar que a mesma não suporta gravação no tipo mídia atual.
                  GMT_ONLINE(x): O último open() encontrou uma fita na unidade e pronta para operação.
                  GMT_D_6250(x),  GMT_D_1600(x), GMT_D_800(x): Reporta informações de estado “genéricas” sobre a
                      densidade atual definida em 9-track enas para unidades de fita de 12".
                  GMT_DR_OPEN(x): A unidade não contém uma fita.
                  GMT_IM_REP_EN(x): Modo de Informação Imediata. Este bit é definido se não há garantias que  os
                      foram  fisicamente  gravados na fita quando a chamada de gravação retorna.  Ele é definido
                      zero apenas quando o driver não buferiza os dados e  a  unidade  está  definida  para  não
                      colocar os dados no buffer.
       mt_erreg   O  único  campo  definido  em mt_erreg é o contador de erros recuperados, nos 16 bits de baixa
                  órdem (como definido porMT_ST_SOFTERR_SHIFT e MT_ST_SOFTERR_MASK).  Devido  a  inconsistências
                  na  forma  como  as  unidades  informam  os erros recuperados, o contador freqüentemente não é
                  mantido (a maioria das unidades não informam por padrão erros de programas, mas isto pode  ser
                  alterado com o comando SCSI MODE SELECT).
       mt_fileno  Informa  o  número atual do arquivo (base-zero).  Este valor é -1 quando o número do arquivo é
                  desconhecido (i.e., depois de MTBSS ou MTSEEK).
       mt_blkno   Informa o número de bloco (base-zero) do arquivo atual.  Este valor é -1 quando  o  número  do
                  bloco é desconhecido (i.e., depois de MTBSF, MTBSS, ou MTSEEK).

   MTIOCPOS - Obtém a posição da fita.
       Este  requesito  aceita  um  argumento do tipo (struct mtpos *) e informa a noção da unidade do número de
       bloco da fita atual, que não é o mesmo que mt_blkno retornado por  MTIOCGET.   A  unidade  deve  ser  uma
       SCSI-2  que  suporte  o  comando READ POSITION (endereço específico do dispositivo) ou uma unidade SCSI-1
       Tandberg-compatível (Tandberg, Archive Viper, Wangtek, ... ).

       /* estrutura para MTIOCPOS - comando para obter a posição da fita */
       struct     mtpos {
           long   mt_blkno; /* número do bloco atual */
       };

VALOR RETORNADO

       EIO           A operação solicitada não pode ser concluida.

       ENOSPC        Uma operação de gravação não pode ser concluida porque a fita chegou no final físico.

       EACCES        Tentando gravar ou apagar um fita com proteção a  gravação.   (Este  erro  não  é  detetado
                     durante um open().)

       EFAULT        Os parâmetros do comando apontam para memória que não pertencem ao processo chamado.

       ENXIO         Durante a abertura o dispositivo de fita não existe.

       EBUSY         O dispositivo já está em uso ou o driver não conseguiu alocar um buffer.

       EOVERFLOW     Tentou  ler  ou  gravar um bloco de tamanho variável que é maior do que o buffer interno da
                     unidade.

       EINVAL        Um ioctl() tem um argumento ilegal ou o tamanho do bloco requisita é ilegal.

       ENOSYS        ioctl() desconhecido.

       EROFS         Tentativa de abrir com O_WRONLY ou O_RDWR quando a fita na unidade  está  protegida  contra
                     gravação.

ARQUIVOS

       /dev/st*  : Dispositivo de fita SCSI com auto-rebobinamento
       /dev/nst* : Dispositivo de fita SCSI sem auto-rebobinamento

AUTOR

       O  driver  foi  escrito por Kai Mäkisara (Kai.Makisara@metla.fi) a partir de um driver escrito por Dwayne
       Forsyth. Várias outras pessoas também contribuiram com o driver.

VEJA TAMBÉM

       mt(1)

       O arquivo README.st nos fontes  do  Linux  contém  informações  mais  recentes  sobre  o  driver  e  suas
       possibilidades de configuração.

NOTAS

       1.  Quando  trocar  dados  entre sistemas, ambos tem que usar o mesmo tamanho de bloco físico da fita. Os
       parâmetros da unidade após a inicialização freqÜentemente não são os mesmos que  o  sistema  usa  para  o
       dispositivo.  A maioria dos sistema usam unidades no modo de blocagem variável, se a mesma suportar. Isto
       aplica-se a maioria das unidades modernas, incluindo DATs, 8mm, DLTs, etc. Pode ser  oportuno  usar  esta
       unidades  em modo variável também no Linux (i.e usa MTSETBLK ou MTSETDEFBLK na inicialização para definir
       o modo), ao menos quando trocar dados com outros sistemas. A desvantagem disto é que um tamanho de  bloco
       suficientemente  grande  tem  que  ser usado para obter uma taxa de transferência aceitável em barramento
       SCSI.

       2. Muitos programas (por ex., tar) permitem ao usuário especificar o fator de bloco na linha de  comando.
       Note que isto determina o tamanho do bloco físico na fita apenas no modo de bloco variável.

       3.  Para poder usar unidades SCSI, o driver SCSI básico, o driver da placa SCSI e o driver para fita SCSI
       deve ser compilado no Linux ou carregado como módulo. Se o driver para fita SCSI não estiver presente,  a
       unidade é reconhecida, mas o suporte descrito nesta página não está disponível.

       4.  O  driver  grava  as  mensagens  de erro no console/log. Os códigos escritos em algumas mensagens são
       automáticamente traduzidos para texto se a exibição das mensagens SCSI está habilitada na  compilação  do
       Linux.

DIREITOS AUTORAIS

       Copyright © 1995 Robert K. Nichols.
       Copyright © 1999 Kai Mäkisara.

       É  permitido  fazer  e  distribuir  cópias  deste  manual  desde  que o aviso de direitos autorais e esta
       permissão esteja presente em todas as cópias.  Permissões adicionais estão  contidas  nos  cabeçalhos  do
       arquivo fonte.

TRADUÇÃO E REVISÃO PARA LÍNGUA PORTUGUESA

       Fábio     Henrique     F.    Silva    <fabiohfs@eol.com.br>    (tradução)    Carlos    Augusto    Horylka
       <horylka@conectiva.com.br> (revisão)

Linux 2.0 - 2.2                                    18/01/1999                                              ST(4)