serviço do kernel ufdcreate

Propósito

Aloca e inicializa um descritor de arquivo.

Sintaxe

#include <fcntl.h>
#include <sys/types.h>
#include <sys/file.h>
int ufdcreate (flags, ops, datap, type, fdp, cnp)
int  flags;
struct fileops * ops;
void * datap;
short  type;
int * fdp;
struct ucred *crp;

Parâmetros

Item Descrição
sinalizadores Especifica as bandeiras para salvar em uma estrutura arquivo . A estrutura do arquivo é definida no arquivo sys/file.h Se uma subroutine leitura ou escrever for chamada com o descritor de arquivo returado por esta rotina, as bandeiras FREAD e FWRITE devem ser definidas adequadamente. Os sinalizadores válidos são definidos no arquivo fcntl.h
operações Aponta a lista de rotinas fornecidas pelo subsistema para chamar para as operações do sistema de arquivos: leitura / gravação, ioctl, select, fstat e fechar. A estrutura fileops é definida no arquivo sys/file.h .. Veja "Operações de Arquivo" para obter mais informações.
dados Pontos para estruturas dependentes do tipo. O sistema salva este ponteiro na estrutura arquivo . Como resultado, o ponteiro está disponível para as operações de arquivo quando são chamadas.
tipo Especifica o valor de tipo exclusivo para a estrutura arquivo . Os tipos válidos são listados no arquivo sys/file.h
fdp Aponta para um campo inteiro onde o descritor de arquivo é armazenado em retorno bem-sucedido.
crp Aponta para uma estrutura de credenciais. Este ponteiro é salvo na estruturação de arquivo para uso em operações subsequentes. Ele deve ser uma estruturação ucredo válida. O serviço kernel crref () pode ser usado para obter uma estruturação ucredo .

Descrição

O serviço kernel ufdcreate fornece uma interface de arquivo para extensões do kernel. Extensões do kernel usam este serviço para criar um descritor de arquivo e par de estrutura de arquivos. Também, este serviço permite extensões do kernel para fornecer suas próprias chamadas de sistema baseado em descritor de arquivos, permitindo a leitura / gravação, ioctl, select, fstat e fechamento de operações em objetos fora do sistema de arquivos. Os serviços do kernel ufdcreate não requerem a extensão para entender ou adequar-se aos requisitos de sincronização do sistema de arquivos lógico (IFT).

O serviço kernel ufdcreate fornece um descritor de arquivo para o caller e cria a estrutura de arquivo subjacente. O ouvinte deve incluir ponteiros para rotinas fornecidas pelo subsistema para as operações de leitura / gravação, ioctl, select, fstat e fechamento. Se alguma das operações não for necessária pelo subsistema de chamada, então o ouvinte deverá fornecer um ponteiro para um valor errno apropriado. Geralmente, o valor EOPNOTSUPP é usado para esta finalidade. Veja "Operações de Arquivo" para obter informações sobre os requisitos para as rotinas fornecidas pelo subsistema.

Removendo um Descritor de Arquivo

Não há operação correspondente para remover um descritor de arquivo (e as estruturas atendidas) criado pelo serviço kernel ufdcreate . Para remover um descritor de arquivo, use uma chamada para a subroutine fechar . A subroutine fechar pode ser chamada de uma rotina ou de dentro da extensão kernel ou kernel. Se o fechamento não for chamado, o arquivo será fechado quando o processo sair.

Uma vez que uma chamada é feita ao serviço kernel ufdcreate , o descritor de arquivo é considerado aberto antes da chamada para o serviço retornar. Quando uma subroutine fechar ou saída é chamada, a operação de arquivo próximo especificada na chamada para a interface ufdcreate é chamada.

Operações de Arquivo

O serviço kernel ufdcreate permite extensões do kernel para fornecer suas próprias chamadas de sistema baseado em descritor de arquivos, permitindo a leitura / gravação, ioctl, select, fstat e fechamento de operações em objetos fora do sistema de arquivos. A estrutura fileops definida no arquivo sys/file.h fornece interfaces para essas rotinas

leitura / gravação Requisitos

A operação de leitura / gravação gerencia entrada e saída para o objeto especificado pelo parâmetro fp . As ações realizadas por esta operação são dependentes do tipo de objeto. A sintaxe para a operação é a seguinte:

#include <sys/types.h>
#include <sys/uio.h>
int (*fo_rw) (fp, rw, uiop, ext)
struct file *fp;
enum uio_rw rw;
struct uio *uiop;
int ext;

Os parâmetros possuem os seguintes valores:

Valor Descrição
Fp Aponta para a estrutura arquivo . Esta estrutura corresponde ao descritor de arquivo utilizado no subbroutine leitura ou escrever .
rw Contém um valor UIO_READ para uma operação de leitura ou UIO_WRITE valor para uma operação de gravação.
uiop Aponta para uma estrutura uio . Esta estrutura descreve as informações de localização e tamanho para a entrada e saída solicitadas. A estrutura uio é definida no arquivo uio.h ..
ramal Especifica informações dependentes do subsistema. Se a subroutine readx ou writex for usada, o valor passado pela operação é passado até esta sub-broutine. Caso contrário, o valor é 0.

Se bem-sucedida, a operação fo_rw retorna um valor de 0. Um valor de retorno não zero deve ser programado para indicar um erro. Consulte o arquivo sys/errno.h para obter uma lista de valores possíveis

Nota: Em retorno bem-sucedido, ouiop->uio_residcampo deve ser atualizado para incluir o número de bytes de dados realmente transferidos.

requisitos do ioctl

A operação ioctl fornece processamento de comando especial dependente de objetos. A subroutine ioctl executa uma variedade de operações de controle sobre o objeto associado à estrutura de arquivo aberta especificada. Essa subroutine é tipicamente usada com o caractere ou bloquear arquivos especiais e retorna um erro para arquivos comuns.

A operação de controle fornecida pela operação ioctl é específica para o objeto que está sendo abordado, assim como o tipo de dados e o conteúdo do parâmetro arg .

A sintaxe para a operação ioctl é a seguinte:

#include <sys/types.h>
#include <sys/ioctl.h>
int (*fo_ioctl) (fp, cmd, arg, ext, kflag)
struct file *fp;
int cmd, ext, kflag;
caddr_t arg; 

Os parâmetros possuem os seguintes valores:

Valor Descrição
Fp Aponta para a estrutura arquivo . Essa estrutura corresponde ao descritor de arquivo utilizado pela subroutina ioctl .
cmd Define o pedido específico a ser agido por esta rotina.
arg Contém dados que são dependentes do parâmetro cmd .
ramal Especifica informações específicas do subsistema. Se a subroutine ioctlx for usada, o valor repassado pelo aplicativo é passado até esta subroutine. Caso contrário, o valor é 0.
kflag Determina de onde a chamada é feita. O parâmetro kflag tem o valor FKERNEL (do arquivo fcntl.h ) se essa rotina for chamada por meio da interface fp_ioctl . Caso contrário, seu valor é de 0.

Se bem-sucedida, a operação fo_ioctl retorna um valor de 0. Para erros, a operação fo_ioctl deve retornar um valor de retorno diferente de zero para indicar um erro. Consulte o arquivo sys/errno.h para obter a lista de valores possíveis

selecionar Requisitos

A operação select realiza uma operação select no objeto especificado pelo parâmetro fp . A sintaxe para esta operação é a seguinte:

#include <sys/types.h>
int (*fo_select) (fp, corl, reqevents, rtneventsp, notify)
struct file *fp;
int corl;
ushort reqevents, *rtneventsp;
void (notify) ();

Os parâmetros possuem os seguintes valores:

Valor Descrição
Fp Aponta para a estrutura arquivo . Essa estrutura corresponde ao descritor de arquivo utilizado pela subroutina selecionar .
coral Especifica o ID usado para correlação no serviço kernel selnotificar .
reqeventos Identifica os eventos para verificar. As funções de sondagem e seleção definem três bandeiras de eventos padrão e uma bandeira informativa. O arquivo sys/poll.h detalha a definição de bit de evento Veja o serviço de kernel fp_select para obter informações sobre as possíveis sinalizadores.
rtneventsp Indica o ponteiro de eventos retornados. Este parâmetro, passado por referência, indica os eventos que são verdadeiros no momento atual. Os bits de eventos retornados incluem os eventos de solicitação e um indicador de eventos de erro.
notify Aponta para uma rotina para chamar quando o objeto especificado invoca o serviço de kernel selnotificar para uma solicitação de evento de seleção ou pesquisa assíncrona pendente. Se nenhuma rotina deve ser chamada, este parâmetro deve ser nulo.

Se bem-sucedida, a operação fo_select retorna um valor de 0. Esta operação deve retornar um valor de retorno diferente de zero para indicar um erro. Consulte o arquivo sys/errno.h para obter a lista de valores possíveis

fstat Requisitos

A operação fstat preenche uma estrutura atributo . Dependendo do tipo de objeto especificado pelo parâmetro fp , muitos campos na estrutura podem não ser aplicáveis. O valor repassado a partir desta operação é dependente tanto do tipo de objeto quanto do que qualquer rotina que entenda o tipo está esperando. A sintaxe para esta operação é a seguinte:

#include <sys/types.h>
int (*fo_fstat) (fp, sbp)
struct file *fp;
struct stat *sbp;

Os parâmetros possuem os seguintes valores:

Valor Descrição
Fp Aponta para a estrutura arquivo . Essa estrutura corresponde ao descritor de arquivo utilizado pela subroutina stat .
sbp Aponta para a estrutura stat a ser preenchida por esta operação. O endereço fornecido está no espaço do kernel.

Se bem-sucedida, a operação fo_fstat retorna um valor de 0. Um valor de retorno não zero deve ser programado para indicar um erro. Consulte o arquivo sys/errno.h para obter a lista de valores possíveis

fechar Requisitos

A operação de fechamento invalida o acesso de rotina aos objetos especificados pelo parâmetro fp e libera quaisquer dados associados a esse acesso. Esta operação é chamada a partir do código subroutine fechar quando a contagem de uso da estrutura arquivo é decretada para 0. Por exemplo, se houver vários acessos a um objeto (criado pelo dup, garfoou outra operação específica do subsistema), o subroutine fechar chama a operação de fechamento quando ele determina que não há acesso restante através da estrutura arquivo sendo fechada.

Um descritor de arquivo é considerado aberto uma vez que um descritor de arquivo e a estrutura arquivo foram configurados pelo IFT. A operação de fechamento de arquivo é chamada sempre que um fechamento ou saída é especificado. Como resultado, a operação de fechamento deve ser capaz de fechar um objeto que não esteja totalmente aberto, dependendo do que o ouvinte fez antes que a estrutura arquivo foi inicializada.

A sintaxe para a operação de fechamento é a seguinte:

#include <sys/file.h>
int (*fo_close) (fp)
struct file *fp;

O parâmetro é:

Item Descrição
Fp Aponta para a estrutura arquivo . Essa estrutura corresponde ao descritor de arquivo utilizado pela subroutina fechar .

Se bem-sucedida, a operação fo_close retorna um valor de 0. Esta operação deve retornar um valor de retorno diferente de zero para indicar um erro. Consulte o arquivo sys/errno.h para obter a lista de valores possíveis

Ambiente de Execução

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

Valores De Retorno

Se o serviço kernel ufdcreate tiver sucesso, ele retorna um valor de 0. Se o serviço do kernel falhar, ele retorna um valor não zero e configura a variável global errno .

Códigos De Erro

O serviço de kernel ufdcreate falha se ocorrer um ou mais dos seguintes erros:

Erro Descrição
EINVAL O parâmetro ops é nulo, ou a estrutura fileops não tem entradas para cada operação.
EMFILE Todos os descritores de arquivo para o processo já foram alocados.
ENFILE A tabela de arquivos de sistema está cheia.