Operações em meta-dados

Nesta seção são apresentadas as principais funções para manipular meta-dados do sistema de arquivos, como: renomear arquivos, remover arquivos, consultar/alterar atributos e permissões.

Renomear e remover

#include <stdio.h>
int rename (const char *oldname, const char *newname)

Renomeia um arquivo do nome antigo oldname para o nome novo newname. Ambos os nome devem pertencer ao mesmo sistema de arquivos (mas não precisam estar no mesmo diretório). Retorna -1 em caso de erro.

#include <unistd.h>
int unlink (const char *filename)   /* versão Posix */
 
#include <stdio.h>
int remove (const char *filename)   /* versão ISO */

Removem o arquivo indicado.

Consultar atributos

As funções abaixo servem para consultar os atributos de um arquivo. Todas elas retornam os atributos em um buffer de tipo struct stat.

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
int stat (const char *filename, struct stat *buf)

Consulta os atributos de um arquivo indicado por filename.

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
int fstat (int filedes, struct stat *buf)

Idem, para o arquivo indicado pelo descritor filedes.

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
int lstat (const char *filename, struct stat *buf)

Idem, mas não segue links simbólicos (se filename for um link, retorna os atributos do próprio link).

Todas as funções acima retornam um buffer do tipo struct stat (definido em sys/stat.h) que contém os seguintes campos:

As seguintes macros permitem verificar o tipo do arquivo, com base no campo st_mode da estrutura stat do arquivo. Elas retornam não-zero se o arquivo corresponder ao tipo especificado:

As constantes a seguir, definidas em sys/stat.h, são usadas para testar as permissões de acesso a um arquivo:

Para testar as permissões de um arquivo, basta realizar um AND entre a constante definindo a permissão a testar e o campo st_mode do struct stat referente ao arquivo:

if (buf.st_mode & S_IRUSR)
   printf ("File owner can read this file\n") ;

Obs: usar permissões em octal (0644) nos programas não é portável e prejudica sua legibilidade. Sempre que possível, devem ser usadas as permissões simbólicas.

Alterar permissões

#include <sys/types.h>
#include <sys/stat.h>
int chmod (const char *filename, mode_t mode)

Ajusta as permissões do arquivo filename para mode (que consiste em um OR binário das permissões desejadas). Se filename for um link simbólico, ajusta as permissões do arquivo apontado pelo link.

#include <sys/types.h>
#include <sys/stat.h>
int fchmod (int filedes, int mode)

Idem, sobre o arquivo aberto indicado pelo descritor filedes.

#include <unistd.h>
int link (const char *oldname, const char *newname)

Cria um link físico (hard link) para oldname usando o nome newname.

#include <unistd.h>
int symlink (const char *oldname, const char *newname)

Cria um link simbólico (symbolic link) para oldname usando o nome newname.

#include <unistd.h>
int readlink (const char *filename, char *buffer, size_t size)

Obtém o nome apontado pelo link simbólico filename. O resultado é copiado em buffer e a função retorna o número de caracteres copiado.