System Calls (OS Calls) ============================================= As *system calls- de gestão de ficheiros permitem que um programa use directamente o sistema operativo para criar, abrir, ler, escrever e apagar ficheiros. open() ------ O open() serve para abrir um ficheiro. .. code-block:: c int open(const char *pathname, int flags); .. code-block:: c int fd = open("dados.txt", O_RDONLY); - pathname → nome do ficheiro - flags → modo de abertura - O_RDONLY → apenas leitura - O_WRONLY → apenas escrita - O_RDWR → leitura e escrita - O_CREAT → cria o ficheiro se não existir O retorno é um file descriptor. read() ------ O read() serve para ler dados de um ficheiro. .. code-block:: c ssize_t read(int fd, void *buffer, size_t count); .. code-block:: c read(fd, buffer, 100); Explicação: - fd → descritor do ficheiro - buffer → onde guardar os dados - count → número de bytes a ler write() ------- O write() serve para escrever dados num ficheiro. .. code-block:: c ssize_t write(int fd, const void *buffer, size_t count); .. code-block:: c write(fd, "Olá", 3); close() ------- O close() serve para fechar um ficheiro. .. code-block:: c int close(int fd); .. code-block:: c close(fd); - liberta recursos do sistema - deve ser chamada sempre no final lseek() ------- O lseek() permite mover o cursor dentro do ficheiro. .. code-block:: c off_t lseek(int fd, off_t offset, int whence); .. code-block:: c lseek(fd, 0, SEEK_SET); - SEEK_SET → início - SEEK_CUR → posição atual - SEEK_END → fim do ficheiro unlink() -------- O unlink() remove um ficheiro. .. code-block:: c int unlink(const char *pathname); .. code-block:: c unlink("dados.txt"); rename() -------- O rename() altera o nome de um ficheiro. .. code-block:: c int rename(const char *oldname, const char *newname); .. code-block:: c rename("a.txt", "b.txt"); mkdir() ------- O mkdir() cria uma diretoria. .. code-block:: c int mkdir(const char *pathname, mode_t mode); .. code-block:: c mkdir("docs", 0777); rmdir() ------- O rmdir() remove uma diretoria vazia. .. code-block:: c int rmdir(const char *pathname); .. code-block:: c rmdir("docs"); Resumo ---------- +------------+----------------------------------+ | System Call| Função | +============+==================================+ | open() | Abrir ficheiro | +------------+----------------------------------+ | read() | Ler ficheiro | +------------+----------------------------------+ | write() | Escrever ficheiro | +------------+----------------------------------+ | close() | Fechar ficheiro | +------------+----------------------------------+ | lseek() | Mover cursor no ficheiro | +------------+----------------------------------+ | unlink() | Apagar ficheiro | +------------+----------------------------------+ | rename() | Renomear ficheiro | +------------+----------------------------------+ | mkdir() | Criar diretoria | +------------+----------------------------------+ | rmdir() | Remover diretoria | +------------+----------------------------------+