Introdução ao Sistema de Ficheiros =================================== Os sistema de ficheiros gerido pelo Sistema Operativo é essencial para permitir ao SO gerir de forma organizada os seus dados guardados por sua vez como discos rígidos, SSDs e unidades USB. .. image:: /pictures/sistema_ficheiros.png :alt: Sistema de Ficheiros :align: center :width: 50% No Sistema Operativo temos um sistema hierárquico de gestão de ficheiros. As aplicações usam diferentes linguages (como C) para efectuar pedidos de gestão de ficheiros como operações de leitura, escrita ou remoção. Quem gere esses pedidos é o sistema lógico que gere metadados, nomes de ficheiros, directorias e permissões de acesso. o comando ls está relacionado com o sistema lógico de ficheiros. Este comando permite listar o conteúdo de directorias e consultar metadados dos ficheiros, como nome ou permissões de acesso. .. code-block:: console $ ls -l -rw-r--r-- 1 user user 1024 May 11 10:30 notes.txt drwxr-xr-x 2 user user 4096 May 11 09:00 documents O sistema virtual de ficheiros serve de interface entre o sistema operativo e o hardware de armazenamento. É o sistema virtual que permite aos utilizadores e suas aplicações executarem operações sobre ficheiros em paralelo e de forma eficiente. Finalmente, o designado sistema físico de ficheiros gere os blocos de dados persistentes nos "storage devices". Em UNIX/Linux, há muitas entidades tratadas como um ficheiro (até os famosos semáforos e memória virtual). Ficheiros, directorias, dispositivos de USB, canais de comunicação (sockets) são todos identificados por um "file descriptor" (fd). Isto simplifica o design do sistema operativo e a interação entre processos (comunicação). Entender como se gere ficheiros num sistema operativo UNIX/Linux é essencial porque frequentemente precisamos de guardar dados de forma persistente, ler de ficheiros de configuração, processar logs ou gerir recursos como estruturas de dados e outros fins. Esta secção introduz conceitos básicos de gestão de ficheiros em C e Linux, incluindo o que é um file descriptor, system calls como open(), read(), write(), e funções como fopen(), fread(), e fwrite().