next up previous
Next: Função fdopen() Up: Descrição de algumas primitivas Previous: Descrição de algumas primitivas


Primitivas open() e creat()

       #include <sys/types.h>
       #include <sys/stat.h>
       #include <fcntl.h>

       int open(const char *pathname, int flags);
       int open(const char *pathname, int flags, mode_t mode);
       int creat(const char *pathname, mode_t mode);

Valor de retorno: descritor do arquivo ou -1 em caso de erro.

As chamadas open() e creat() possibilitam a criação de um arquivo no sistema.

A primitiva creat() realiza a criação de um arquivo, com o nome definido pelo parâmetro path. O inteiro perm corresponde ao número octal (direito de acesso) conforme descrito em 1.4.2.

Se o arquivo não existia, ele é aberto em modo escrita. Senão, a autorização de escrita não é necessária (apenas a autorização para execução já seria suficiente). Neste caso, usuário e grupo efetivos tornam-se proprietários do arquivo. Nem os proprietários dos arquivos, nem as autorizações são modificados, mas seu tamanho é fixado em 0, e o arquivo é aberto em modo escrita (o argumento perm será então ignorado).

Para criar um arquivo de nome teste_create com as autorizações de leitura e escrita para o proprietário e o grupo, deve-se escrever:

         if ( (fd=creat("teste\_create", 0666) ) == -1)
                perror("Error creat()");

A primitiva open() permite a abertura (ou a criação) de um arquivo de nome igual à string apontada pelo ponteiro pathname. O parâmetro mode determina as permissões para o uso do arquivo que foi criado. Ele só é utilizado quando open() é usado na criação de um arquivo.O parâmetro flags define a forma de abertura do arquivo, podendo receber uma ou mais constantes simbólicas separadas por operadores | (ou), definidas no arquivo <fcntl.h>, como mostra a tabela 1.1.


Tabela 1.1: Flags utilizados com a primitiva open()
Valor mneumônico Função
00000 O_RDONLY Abertura de arquivo somente em modo leitura
00001 O_WRONLY Abertura de arquivo somente em modo escrita
00002 O_RDWR Abertura de arquivo em modo leitura e escrita
00004 O_NDELAY Impede o bloqueio de um processo numa chamada de leitura sobre um pipe, um pipe tipo FIFO (First In First Out) ou um arquivo especial, ainda não aberto em escrita; retorna um erro numa chamada de escrita sobre um pipe, um pipe tipo FIFO ou um arquivo especial, ainda não aberto em leitura, ainda sem bloquear o processo.
00010 O_APPEND Abertura em escrita no fim do arquivo
00400 O_CREAT Criação do arquivo, caso ele ainda não exista (único caso de utilização do argumento flag)
01000 O_TRUNC Truncar o tamanho do arquivo em 0 caso o arquivo exista
02000 O_EXCL Se O_CREAT está setado, provoca um erro se o arquivo já existe


Exemplo:

Para criar e abrir o arquivo teste_open em modo escrita com as permissões leitura e escrita para o proprietário e para o grupo, deve-se escrever o seguinte código:

if ((fd=open(``test_open'', O_WRONLY| O_CREAT| O_TRUNC, 0666)) == -1)
    perror("Error open()");


next up previous
Next: Função fdopen() Up: Descrição de algumas primitivas Previous: Descrição de algumas primitivas
Celso Alberto Saibel Santos 2000-11-14