Tenho uma dúvida sobre o que contém a entrada criada na Tabela de Arquivos Abertos ao chamar open()
.
O esquema a seguir
do bytebytego parece muito bom para entender o panorama geral da abertura de um arquivo, mas na Tabela de Arquivos Abertos não vejo nada sobre permissões de arquivo (que são representadas apenas no inode na parte inferior).
Esta fonte diz:
A tabela de arquivos abertos contém várias informações sobre cada arquivo:
- o deslocamento atual (a próxima posição a ser acessada no arquivo)
- uma contagem de referência (explicaremos abaixo na seção sobre fork())
- o modo de arquivo (permissões) ,
- ...
Como as permissões de arquivo são armazenadas no disco em seu inode, se a última fonte que mencionei estiver correta, isso significa que as permissões são copiadas na entrada da Open File Table ? E se sim, talvez o esquema do bytebytego tenha omitido esse detalhe por uma questão de simplicidade?
Sim, as permissões são copiadas para a tabela de arquivos abertos. Não sei por que o diagrama bytebytego omite isso (em todo caso, ele mostra uma visão muito simplificada dos dados envolvidos, o que não é surpreendente porque há muitos dados).
No kernel, os arquivos são representados por instâncias de
struct file
, e elas incluem um ponteiro para ostruct inode
, que contém uma cópia do modo do arquivo (incluindo permissões).Se você quiser acompanhar isso a partir de uma tarefa,
task_struct
tem umfiles
campo apontando para a tabela de arquivos abertos representada por instâncias defiles_struct
, que aponta parastruct fdtable
o que leva a uma matriz destruct file
.