Introdução

Na parte 1, vimos como o kernel Linux implementa a lista ligada genérica usando o container_of para criar uma lista ligada de arquivos. Nesta parte, exploraremos como o kernel implementa polimorfismo e herança em C, uma linguagem que não tem classes ou métodos virtuais.

A API de arquivos do Linux e a arte de fazer o impossível em C parte 2

A Interface de Arquivos

O kernel Linux implementa uma interface de arquivos que agrupa os ponteiros de função necessários para cada tipo de arquivo. Cada função recebe o próprio struct arquivo * como primeiro argumento, similar ao this em linguagens orientadas a objetos.

Implementando Classes de Arquivo

Arquivo em Memória

Implementamos uma classe de arquivo em memória que funciona exatamente como um arquivo comum, mas grava tudo em maiúsculas. O mem_escrever espera que a->privado aponte para uma struct memoria, o que permite que o memoria funcione sem alterações.

Arquivo em Disco

Implementamos um arquivo em disco que funciona exatamente como um arquivo em disco comum. O disk_read espera que a->privado aponte para um struct disco, o que permite que o disco funcione sem alterações.

O VFS (Virtual File System)

O VFS é uma camada de abstração que permite que o kernel Linux trate arquivos de diferentes tipos de maneira uniforme. As mesmas chamadas de função são feitas, mas os arquivos respondem de maneiras diferentes.

Polimorfismo e Herança

O VFS permite que os arquivos implementem métodos opcionais sem precisar reescrever tudo. Isso é possível porque o VFS trata NULL como

ArquivosArteFazerLinuxParte