unlink
Diferenças
Aqui você vê as diferenças entre duas revisões dessa página.
— | unlink [2023/09/12 16:14] (atual) – criada - edição externa 127.0.0.1 | ||
---|---|---|---|
Linha 1: | Linha 1: | ||
+ | ====== Função unlink ====== | ||
+ | |||
+ | Sintaxe: | ||
+ | |||
+ | '' | ||
+ | |||
+ | ---- | ||
+ | |||
+ | |||
+ | A remoção de um arquivo de um sistema de arquivo é feita através da função **unlink**. Este nome é devido a que a função simplesmente recebe um nome de arquivo como parâmetro e decrementa o número de links existente no [[inode]] do mesmo (consulte o manual do sistema e veja o comando [[ln]]). Caso o número de links atinja o valor zero, então os dados do arquivo serão liberados para o sistema como áreas livres para uso. | ||
+ | |||
+ | Isto permite que se faça a remoção de arquivos ainda abertos, sem que haja a perda de dados enquanto o arquivo estiver aberto. Esta técnica permite a criação de arquivo temporários através da abertura dos mesmos. Logo em seguida remove-se o arquivo com a função **unlink** que irá decrementar o atributo correspondente. | ||
+ | |||
+ | Os dados criados pelo processo continuam a valer até que o processo feche o arquivo. Nesta ocasião seriam alterados os atributos do inode com as informações pertinentes, | ||
+ | |||
+ | Veja o exemplo: | ||
+ | |||
+ | <code c> | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | |||
+ | int main (int argc, char *argv[]) | ||
+ | { | ||
+ | | ||
+ | char *szArquivo; | ||
+ | char szBuffer[25]; | ||
+ | |||
+ | /* Função que retorna um nome aleatório baseado nos parâmetros informados. O nome retornado é único no sistema. */ | ||
+ | | ||
+ | |||
+ | | ||
+ | | ||
+ | if (iFileDescriptor < 0) | ||
+ | { | ||
+ | perror (argv[0]); | ||
+ | exit (1); | ||
+ | } | ||
+ | |||
+ | | ||
+ | if (unlink (szArquivo) < 0) | ||
+ | { | ||
+ | perror (argv[0]); | ||
+ | exit (1); | ||
+ | } | ||
+ | |||
+ | | ||
+ | | ||
+ | if (write (iFileDescriptor, | ||
+ | { | ||
+ | perror (argv[0]); | ||
+ | exit (1); | ||
+ | } | ||
+ | |||
+ | | ||
+ | | ||
+ | |||
+ | lseek (iFileDescriptor, | ||
+ | |||
+ | if (read (iFileDescriptor, | ||
+ | { | ||
+ | perror (argv[0]); | ||
+ | exit (1); | ||
+ | } | ||
+ | |||
+ | | ||
+ | close (iFileDescriptor); | ||
+ | | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | --- // | ||