Identificadores e nomes de arquivos

6

Eu li este post .

Os descritores de arquivos são iguais aos do manipulador de arquivos?

Ao tentar configurar o kernel do linux, ele pede open by fhandle syscalls (FHANDLE) [Y/n/?] .

Por que essa opção é fornecida? Isso afeta o desempenho do kernel ou tempo de compilação ou apenas para ter um método uniforme de acessar arquivos?

    
por user2555595 23.07.2014 / 15:22

2 respostas

4

Uma estrutura FILE em C é geralmente chamada de file handle e é um pouco de abstração em torno de < em> descritor de arquivo :

The data type FILE is a structure that contains information about a file or specified data stream. It includes such information as a file descriptor, current position, status flags, and more. It is most often used as a pointer to a file type, as file I/O functions predominantly take pointers as parameters, not the structures themselves.

Eu não tenho um ambiente de criação de kernel à mão, mas deve haver um texto de ajuda que explique a opção e, de acordo com a pesquisa rápida, ele deve dizer algo como:

CONFIG_FHANDLE - open by fhandle syscalls -
If you say Y here, a user level program will be able to map file names to handle and then later use the handle for different file system operations. This is useful in implementing userspace file servers, which now track files using handles instead of names. The handle would remain the same even if file names get renamed. Enables open_by_handle_at(2) and name_to_handle_at(2) syscalls.

Basicamente, ele adiciona suporte para chamadas de sistema novas / adicionais.

    
por 23.07.2014 / 15:41
2

Você pode ver algumas informações de aqui .

Geralmente, um descritor de arquivo é um índice para uma entrada em uma estrutura de dados residente no kernel contendo os detalhes de todos os arquivos abertos. No POSIX, essa estrutura de dados é chamada de tabela descritor de arquivos , e cada processo tem sua própria tabela descritor de arquivos . O aplicativo do usuário passa a chave abstrata para o kernel por meio de uma chamada de sistema, e o kernel acessará o arquivo em nome do aplicativo, com base na chave. O aplicativo em si não pode ler ou gravar a tabela de descritores de arquivos diretamente.

Em sistemas do tipo Unix, os descritores de arquivos podem se referir a arquivos, diretórios, dispositivos de bloco ou caractere (também chamados de "arquivos especiais"), sockets, FIFOs (também chamados pipes nomeados) ou pipes não nomeados.

O identificador de arquivo FILE * nas rotinas da biblioteca de E / S padrão é tecnicamente um ponteiro para uma estrutura de dados gerenciada por essas rotinas de biblioteca; Uma dessas estruturas geralmente inclui um descritor de arquivo de baixo nível real para o objeto em questão em sistemas semelhantes ao Unix. Como o identificador de arquivo se refere a essa camada adicional, ele não é intercambiável com o descritor de arquivo.

Mais algumas boas leituras podem ser encontradas em aqui e aqui .

    
por 23.07.2014 / 15:44