Descrição
Esta página descreve a interface FileSystem que trata do acesso aos diferentes sistemas de arquivos.
Cada sistema de arquivos é responsável por fazer a sincronização do acesso aos arquivos, verificar os priviléligos de acesso do usuário, etc.
Todo dispositivo para ser montado tem que implementar a interface BlockDev.
0x00 - Close
Sintaxe
void FileSystem_Close(FileSystem_Handle *fd);
Propriedades
Descrição
Esta função fecha o descritor de arquivo fd.
fd é um ponteiro para a estrutura criada pela função Open.
Valor de retorno
Nada.
0x0e - Lookup
Sintaxe
int FileSystem_Lookup(FSManager_Dentry *parent, FSManager_Dentry *newDentry);
Propriedades
Descrição
Esta função procura no diretório parent pela entrada newDentry.
Quem chama esta função deve garantir que somente uma linha de execução chama esta função com o mesmo parâmetro parent.
O campo name de newDentry contém o nome a ser encontrado.
Se newDentry for encontrado os campos mode e fsData de newDentry devem ser preenchidos.
O campo mode tem o mesmo formato que o campo mode de EntryStatus. Já fsdata são dados específicos do sistema de arquivos.
Valor de retorno
- E_OK - Sucesso
- E_BAD_VALUE - Parâmetro inválido
- E_NOT_FOUND - newDentry não existe
- E_NO_MEMORY - Falta de memória
- E_IO_ERROR - Erro de entrada/saída
- E_CORRUPTED_FS - Sistema de arquivos corrompido
- E_FILE_ERROR - Erro indefinido
0x02 - Mount
Sintaxe
int FileSystem_Mount(const char *devImp, unsigned int unit, int prop, const char *data, FSManager_Dentry *dentry);
Propriedades
Descrição
Esta função monta a unidade unit do dispositivo devImp com as propriedades prop.
data são dados específicos para o sistema de arquivos.
Esta função só pode ser chamada uma única vez para cada par devImp, unit.
Quem chama esta função deve garantir que somente uma linha de execução esteja executando esta função concorrentemente.
Em caso de sucesso, o campo fsData de dentry deve ser preenchido. fsdata são dados específicos do sistema de arquivos.
prop deve ser 0 ou o somatório de:
- 0x01 - FSManager_MOUNT_RO - monta o sistema de arquivos apenas para leitura
Valor de retorno
- E_OK - Sucesso
- E_BAD_VALUE - Parâmetro inválido
- E_MODULE - Erro obtendo funções do módulo devImp
- E_CORRUPTED_FS - Sistema de arquivos corrompido
- E_READ_ONLY_FS - Sistema de arquivos apenas para leitura
- E_BAD_TYPE - Sistema de arquivos em devImp inválido
- E_IN_USE - Unidade em uso
- E_IO_ERROR - Erro de entrada/saída
- E_NO_MEMORY - Falta de memória
- E_FILE_ERROR - Erro indefinido
0x03 - Open
Sintaxe
int FileSystem_Open(FSManager_Dentry *dentry, int prop, FileSystem_Handle **fd);
Propriedades
Descrição
Esta função abre o arquivo/diretório dentry com as propriedades prop.
fd é o local onde o ponteiro para as informações do arquivo/diretório devem ser guardadas.
prop deve ser o somatório de:
- 0x01 - FSManager_READ - Abre para leitura
- 0x02 - FSManager_WRITE - Abre para escrita (não aplicável para diretórios)
- 0x04 - FSManager_CREATE - Cria o arquivo/diretório se ele não existir
- 0x08 - FSManager_EXCLUSIVE - Usado junto com FSManager_CREATE para retornar erro se o arquivo/diretório existir
- 0x10 - FSManager_TRUNCATE - Se o arquivo existir será truncado (não aplicável para diretórios)
- 0x20 - FSManager_APPEND - Vai ser aberto em modo inclusão (não aplicável para diretórios)
FSManager_READ e/ou FSManager_WRITE são obrigatórios, os demais podem ser adicionados. (FSManager_WRITE + FSManager_CREATE, por exemplo).
No caso de prop ter FSManager_CREATE, prop pode ter também os seguintes valores em octal:
- 070000000 - FSManager_O_USER_RWX - o dono tem permissão de leitura, escrita e execução
- 040000000 - FSManager_O_USER_READ - o dono tem permissão de leitura
- 020000000 - FSManager_O_USER_WRITE - o dono tem permissão de escrita
- 010000000 - FSManager_O_USER_EXEC - o dono tem permissão de execução
- 007000000 - FSManager_O_GROUP_RWX - o grupo tem permissão de leitura, escrita e execução
- 004000000 - FSManager_O_GROUP_READ - o grupo tem permissão de leitura
- 002000000 - FSManager_O_GROUP_WRITE - o grupo tem permissão de escrita
- 001000000 - FSManager_O_GROUP_EXEC - o grupo tem permissão de execução
- 000700000 - FSManager_O_OTHERS_RWX - outros tem permissão de leitura, escrita e execução
- 000400000 - FSManager_O_OTHERS_READ - outros tem permissão de leitura
- 000200000 - FSManager_O_OTHERS_WRITE - outros tem permissão de escrita
- 000100000 - FSManager_O_OTHERS_EXEC - outros tem permissão de execução
Esses valores só são utilizados se o sistema de arquivos suportar.
O ponteiro de leitura/escrita será posicionado no início.
Valor de retorno
- E_OK - Sucesso
- E_BAD_VALUE - Parâmetro inválido
- E_TOO_MANY_OPEN_FILES - Limite máximo de arquivos abertos atingido
- E_READ_ONLY_FS - Sistema de arquivos apenas para leitura
- E_NO_MEMORY - Falta de memória
- E_FS_FULL - Sistema de arquivos cheio
- E_IO_ERROR - Erro de entrada/saída
- E_FILE_ERROR - Erro indefinido
0x05 - Read
Sintaxe
int FileSystem_Read(FSManager_FDIO *request);
Propriedades
Descrição
Esta função processa o pedido de leitura request.
Em caso de sucesso, o campo size de request indicará quantos bytes foram lidos e o ponteiro de leitura/escrita será avançado desse valor.
Valor de retorno
- E_OK - Sucesso
- E_BAD_VALUE - request inválido ou arquivo não foi aberto para leitura
- E_END_REACHED - Fim do arquivo encontrado
- E_FAULT - buf é um endereço inválido
- E_IO_ERROR - Erro de entrada/saída
- E_FILE_ERROR - Erro indefinido
- E_CORRUPTED_FS - Sistema de arquivos corrompido
0x0f - ReadLink
Sintaxe
int FileSystem_ReadLink(FSManager_Dentry *dentry, char *buf, unsigned int size, int prop);
Propriedades
Descrição
Esta função lê o conteúdo da ligação simbólica dentry e a coloca em buf que tem tamanho size bytes.
prop pode ser:
- 0x01 - FSManager_USER_BUF_IO - buf é um buffer no espaço de memória do usuário
Valor de retorno
- E_OK - Sucesso
- E_BAD_VALUE - Parâmetro inválido
- E_TOO_BIG - buf é pequeno
- E_FAULT - buf é um endereço inválido
- E_IO_ERROR - Erro de entrada/saída
- E_FILE_ERROR - Erro indefinido
0x07 - Remove
Sintaxe
int FileSystem_Remove(FSManager_Dentry *dentry);
Propriedades
Descrição
Esta função remove dentry.
dentry pode estar sendo usado. Quem está usando continua podendo usar, mas não é possível abrir, listar, etc.
Um diretório com arquivos não pode ser removido.
Valor de retorno
- E_OK - Sucesso
- E_BAD_VALUE - Parâmetro inválido
- E_READ_ONLY_FS - Sistema de arquivos apenas para leitura
- E_IO_ERROR - Erro de entrada/saída
- E_NO_MEMORY - Falta de memória
- E_FILE_ERROR - Erro indefinido
- E_NOT_EMPTY - O diretório tem arquivos
0x09 - RewindDir
Sintaxe
int FileSystem_RewindDir(FileSystem_Handle *fd);
Propriedades
Descrição
Esta função posiciona a leitura de entradas do diretório fd no início.
Valor de retorno
- E_OK - Sucesso
- E_BAD_VALUE - fd inválido
- E_NOT_A_DIRECTORY - fd não é um diretório
0x0a - Seek
Sintaxe
int FileSystem_Seek(FileSystem_Handle *fd, int count, int prop, int *newPos);
Propriedades
Descrição
Esta função posiciona o ponto de leitura/escrita do arquivo fd na posição count, de acordo com as propriedades prop.
prop deve ser:
- 0x01 - FSManager_SEEK_START - relativo ao início
- 0x02 - FSManager_SEEK_CURRENT - posição corrente
- 0x04 - FSManager_SEEK_END - fim do arquivo
newPos, se for diferente de nulo, vai conter a nova posição no retorno.
Valor de retorno
- E_OK - Sucesso
- E_BAD_VALUE - fd ou prop inválido
- E_TOO_BIG - Posição resultante é maior que o máximo permitido
- E_NOT_ALLOWED - Operação inválida
- E_IS_A_DIRECTORY - fd é um diretório
- E_FILE_ERROR - Erro indefinido
0x0b - Status
Sintaxe
int FileSystem_Status(FSManager_Dentry *dentry, FSManager_EntryStatus *buf, int prop);
Propriedades
Descrição
Esta função obtém informações sobre dentry e as coloca em buf.
prop pode ser:
- 0x80 - FSManager_USER_BUF - buf é um buffer no espaço de memória do usuário
Valor de retorno
- E_OK - Sucesso
- E_BAD_VALUE - Parâmetro inválido
- E_IO_ERROR - Erro de entrada/saída
- E_NO_MEMORY - Falta de memória
- E_FAULT - buf é um endereço inválido
- E_FILE_ERROR - Erro indefinido
0x01 - StatusFD
Sintaxe
int FileSystem_StatusFD(FileSystem_Handle *fd, FSManager_EntryStatus *buf, int prop);
Propriedades
Descrição
Esta função obtém informações sobre fd e as coloca em buf.
prop pode ser:
- 0x80 - FSManager_USER_BUF - buf é um buffer no espaço de memória do usuário
Valor de retorno
- E_OK - Sucesso
- E_BAD_VALUE - Parâmetro inválido
- E_IO_ERROR - Erro de entrada/saída
- E_NO_MEMORY - Falta de memória
- E_FAULT - buf é um endereço inválido
- E_FILE_ERROR - Erro indefinido
0x0c - Unmount
Sintaxe
int FileSystem_Unmount(FSManager_Dentry *dentry, int prop);
Propriedades
Descrição
Esta função desmonta o sistema de arquivos montado em dentry.
prop pode ser 0 ou o somatório de:
- 0x01 - FSManager_FORCE_UNMOUNT - força o desmonte do sistema de arquivos
Valor de retorno
- E_OK - Sucesso
- E_BAD_VALUE - Parâmetro inválido
- E_IN_USE - Sistema de arquivos em uso
- E_IO_ERROR - Erro de entrada/saída
- E_NO_MEMORY - Falta de memória
- E_FILE_ERROR - Erro indefinido
0x0d - Write
Sintaxe
int FileSystem_Write(FSManager_FDIO *request);
Propriedades
Descrição
Esta função processa o pedido de escrita request.
Em caso de sucesso, o campo size de request indicará quantos bytes foram escritos e o ponteiro de leitura/escrita será avançado desse valor.
Valor de retorno
- E_OK - Sucesso
- E_BAD_VALUE - request inválido ou não foi aberto para escrita
- E_FS_FULL - Sem espaço no sistema de arquivos
- E_READ_ONLY_FS - Sistema de arquivos apenas para leitura
- E_IO_ERROR - Erro de entrada/saída
- E_FAULT - buf é um endereço inválido
- E_IS_A_DIRECTORY - fd é um diretório
- E_FILE_ERROR - Erro indefinido