serviço do kernel fp_opendev

Propósito

Abre um arquivo especial de dispositivo.

Sintaxe

#include <sys/types.h>
#include <sys/errno.h>
int fp_opendev (devno,flags,cname, ext, fpp)
dev_tdevno;
int  flags;
caddr_t cname;
ext_t  ext;
struct file** fpp;

Parâmetros

Item Descrição
devno Especifica o número de dispositivo principal e menor de driver de dispositivo para abrir.
flag Especifica um dos seguintes valores:
DREAD
O dispositivo está sendo aberto apenas para leitura.
DWRITE
O dispositivo está sendo aberto para escrita.
DNDELAY
O dispositivo está sendo aberto em modo nonblocking.
cname Aponta para um canal especificando uma sequência de caracteres ou um valor nulo.
ramal Especifica um argumento de extensão requerido por alguns drivers de dispositivo. Seu conteúdo, forma e uso são determinados pelo motorista individual.
fpp Especifica o ponteiro de arquivo retornado. Este parâmetro é passado por referência e é atualizado pelo serviço fp_opendev para ser o ponteiro de arquivo para esta instância aberta. Este ponteiro de arquivo é usado como entrada para outros serviços do Logical File System para especificar a instância aberta.

Descrição

A extensão kernel ou kernel chama o serviço kernel fp_opendev para abrir um dispositivo especificando seu dispositivo principal e menor número. O serviço kernel fp_opendev fornece a semântica correta para abrir a classe de caracteres ou multiplexação de drivers de dispositivo.

Se o driver de dispositivo especificado estiver não multiplexado:

  • Um i-core in-core é encontrado ou criado para este dispositivo.
  • A contagem de referência do i-node é incremento em 1.
  • O ponto de entrada ddopen do driver de dispositivo é chamado com os parâmetros devno, devflage ext . O parâmetro chan não utilizado na chamada para a rotina ddopen é configurado como 0.

Se o driver de dispositivo é um driver de dispositivo de caráter multiplexado (ou seja, seu ponto de entrada ddmpx é definido), um i-core de in-core é criado para este canal. A rotina ddmpx do driver de dispositivo também é chamada com o ponteiro cnome para a cadeia de identificação do canal se não nula. Se o ponteiro cnome for nulo, a rotina do driver de dispositivo ddmpx é chamada com o ponteiro para uma sequência de caracteres nula.

Se o driver do dispositivo pode alocar o canal, a rotina ddmpx retorna um ID de canal, representado pelo parâmetro chan . Se o driver do dispositivo não puder alocar um canal, o serviço kernel fpopendev retorna um código de erro ENXIO . Se bem-sucedida, a contagem de referência do i-node é incrementada em 1. A rotina do driver de dispositivo ddopen também é chamada com o devno, bandeira, chan (fornecido por ddmpx rotina), e ext parâmetros.

Se o valor de retorno da rotina do driver de dispositivo especificado ddopen for nonzero, ele será retornado como o código de retorno para o serviço kernel fp_opendev . Se o código de retorno da rotina do driver de dispositivo ddopen for 0, o serviço fp_opendev retornará o ponteiro de arquivo correspondente a esta abertura do dispositivo.

O serviço kernel fp_opendev só pode ser chamado no ambiente de processo ou driver de dispositivo top metade. Os manipuladores de interrupção não podem chamá-la. Supõe-se que todos os argumentos para o serviço kernel fp_opendev estejam no espaço do kernel.

O ponteiro de arquivo (fpp) retornado pelo serviço kernel fp_opendev é válido apenas para uso com um subconjunto dos serviços do Sistema de Arquivos Lógico. Estes nove serviços podem ser chamados:

Outros serviços retornam um valor de retorno EINVAL se chamados.

Ambiente de Execução

O serviço kernel fp_opendev pode ser chamado a partir do ambiente de processo apenas.

Valores De Retorno

Item Descrição
0 Indica uma operação bem-sucedida.

O campo *fpp também aponta para uma estrutura de arquivo aberto que é válida para uso com os outros serviços do Logical File System. Se ocorrer um erro, um dos seguintes valores a partir do arquivo /usr/include/sys/errno.h é retornado:

Item Descrição
EINVAL Indica que a porção principal do parâmetro devno excede o número máximo permitido, ou o parâmetro bandeiras não é válido.
ENODEV Indica que o dispositivo não existe.
EINTR Indica que o sinal foi flagrado enquanto processava a solicitação fp_opendev .
ENFILE Indica que a tabela de arquivos do sistema está cheia.
ENXIO Indica que o dispositivo está multiplexado e incapaz de alocar o canal.

O serviço fp_opendev também retorna qualquer código de retorno não zero retornado de uma rotina de driver de dispositivo ddopen .