O sistema UNIX é um dos sistemas operacionais mais usados. O C possui uma série de comando de arquivos compatíveis com este S.O.. Vamos ver alguns deles agora. Para maiores informações, não deixe de consultar o manual do seu compilador.
Uma diferença importante entre o sistema já ensinado e o UNIX é que o unix usa, ao invés do FILE*, um "manipulador de arquivos". Este é do tipo int. Mas como o C discutido em nosso curso até agora tem sido o mais ANSI possível (sempre que não isto é documentado), se o seu compilador (ainda que em Unix) é ANSI, tudo dito nas páginas anterior continua valendo. O Unix provê algumas possibilidades a mais. Veja só:
Protótipo:
int open (char *nome_do_arquivo,int modo,int acesso);
Abre um arquivo. Os parâmetros modo e acesso determinam que tipo de uso o programador fará do arquivo. Para uma referência completa sobre os valores válidos para estes parâmetros, consulte o manual do seu compilador.
A função open() abre um arquivo já existente. Já a função creat() cria um novo arquivo para escrita. Seu protótipo é:
int creat (char *nome_do_arquivo,int acesso);
A função close() de protótipo
int close (int da);
Aqui vale ressaltar que o inteiro passado para a função close() é o descritor de arquivo retornado por open() ou por creat().
Protótipo:
int read (int da,void *buffer,unsigned tamanho);
Lê um número de bytes especificado em tamanho. Estes bytes são gravados no buffer para serem depois aproveitados pelo programador. da indica o arquivo do qual serão lidos os dados. A função retorna o número de caracteres lidos (este número pode ser diferente do número de caracters que se pediu que fossem lido caso se tenha, por exemplo, chegado ao fim do arquivo) e -1 em caso de erro.
De funcionamento muito parecido com read() a função write() tem o seguinte protótipo:
int write (int da,void *buffer,unsigned tamanho);
A função write() escreve os caracteres do buffer no arquivo especificado por da. Retorna o número de caracteres que de fato foram escritos. Retorna -1 no caso de erro.
É o equivalente UNIX da função remove() vista na seção 9.7.10. Seu protótipo é:
int unlink (char *nome_do_arquivo);
O arquivo é deletado e a função retorna zero no caso de sucesso.
Protótipo:
long lseek (int da,long numero_de_bytes,int origem);
A função lseek() permite a implementação de acesso randômico no UNIX. A função lseek() funciona como a função fseek() descrita na seção 9.7.9. A origem pode assumir os mesmos valores (SEEK_SET, SEEK_CUR e SEEK_END).