O Linux possui chamadas de sistema para acessar todos os recursos dos sistemas de arquivos suportados?

12

O Linux suporta muitos sistemas de arquivos (por exemplo: ext3, NTFS, FAT32, etc.).

O diagrama a seguir mostra como o Linux permite que um processo acesse arquivos:

insira a descrição da imagem aqui

Portanto, suponha que um processo chamado read()sistema chame a leitura de um arquivo, o que acontecerá é que a camada VFS será acessada e a camada VFS decidirá qual driver do sistema de arquivos acessar com base no sistema de arquivos da partição ao qual o arquivo será acessado. ser lido reside em.

Linux fornece muitas chamadas do sistema para acessar arquivos (por exemplo: read(), write(), rename(), etc.).

Agora read()e write()e rename()trabalho em todos os sistemas de arquivos que suporta Linux.

Mas existem recursos específicos que existem apenas em alguns sistemas de arquivos enquanto não existem em outros. Por exemplo: em um sistema de arquivos NTFS, você pode definir o bit Arquivar para um arquivo, enquanto isso não pode ser feito em um sistema de arquivos ext3.

Agora, minha pergunta é: o Linux tem chamadas de sistema para acessar todos os recursos dos sistemas de arquivos que ele suporta? por exemplo: o Linux tem uma chamada de sistema para definir o bit de arquivamento de um arquivo em um sistema de arquivos NTFS?

user341642
fonte

Respostas:

10

o Linux tem uma chamada de sistema para definir o bit de arquivamento de um arquivo em um sistema de arquivos NTFS?

Nesse caso em particular, o ntfs-3gdriver exporta os atributos do arquivo por meio de atributos estendidos . Consulte Posso definir o bit "Arquivar" em um arquivo no NTFS no Linux?

O sistema de arquivos (V) FAT possui atributos de arquivo semelhantes, mas usa uma ioctl()função para acessá-los, consulte ioctl_fat(2). ( ioctl()é uma espécie de chamada de sistema multiuso, usada para todos os tipos de itens específicos de dispositivo que não justificam uma chamada de sistema real.)

Agora, minha pergunta é: o Linux tem chamadas de sistema para acessar todos os recursos dos sistemas de arquivos que ele suporta?

É difícil responder com certeza , mas houve pelo menos um exemplo do oposto. O ext4 suporta internamente um registro de data e hora de "hora de nascimento" para arquivos (como um tempo de criação real, diferente das ctimealterações na modificação do inode). Porém, embora o ext4 seja o sistema de arquivos "padrão", por um longo tempo, não houve chamada do sistema para acessar o horário de nascimento.

Ele deve ser suportado agora, com a statx()chamada do sistema adicionada no Linux 4.11 , em abril de 2017.

Palavras-chave:

ilkkachu
fonte
3
NTFS! = gordura. Pelo menos a versão do kernel do ntfs NÃO tem como definir ou obter o sinalizador de arquivamento, embora seus cabeçalhos o definam. Apenas o ntfs-3g baseado em fusível parece suportá-lo (por meio de atributos estendidos, não de ioctls especiais).
Tio Billy
Isso não está diretamente relacionado à questão, mas como complemento à sua menção statx, agora é suportado na biblioteca C e na versão mais recente do coreutils, lançada há alguns dias.
Stephen Kitt
@UncleBilly, d'oh, aparentemente eu não sei ler, mas apenas pensei automaticamente em (v) gordura. Obrigado por perceber isso, vou ver se consigo encontrar uma referência mais apropriada.
ilkkachu