Sinopse
#incluir
Descrição
oabrir() O comando system call linux é usado para converter um nome de caminho em um descritor de arquivo (um inteiro pequeno, não negativo, para uso em E / Ss subsequentes, como ler, escrever, etc.). Quando a chamada é bem-sucedida, o descritor de arquivo retornado será o descritor de arquivo mais baixo que não está aberto no momento para o processo. Essa chamada cria um novo arquivo aberto, não compartilhado com qualquer outro processo. (Mas arquivos abertos compartilhados podem surgirgarfo(2) chamada do sistema.) O novo descritor de arquivo é definido para permanecer aberto em todas as funções do exec.fcntl(2)). O deslocamento do arquivo é definido para o início do arquivo.
O parâmetro bandeiras é um dosO_RDONLY, O_WRONLY ouO_RDWR que solicita a abertura do arquivo somente leitura, somente gravação ou leitura / gravação, respectivamente, bit a bit ou d com zero ou mais dos seguintes:
O_CREAT
Se o arquivo não existir, ele será criado. O proprietário (ID do usuário) do arquivo é configurado para o ID do usuário efetivo do processo. A propriedade do grupo (ID do grupo) é definida como o ID do grupo efetivo do processo ou o ID do grupo do diretório pai (dependendo do tipo de sistema de arquivos e opções de montagem e do modo do diretório pai, veja, por exemplo, a montagem opções bsdgroups e sysvgroups do sistema de arquivos ext2, conforme descrito emmontar(8)).
O_EXCL
Quando usado comO_CREAT, se o arquivo já existir, é um erro e oabrir vai falhar. Neste contexto, existe um link simbólico, independentemente de para onde ele aponta.O_EXCL é quebrado em sistemas de arquivos NFS, os programas que dependem dele para executar tarefas de bloqueio conterão uma condição de corrida. A solução para executar o bloqueio de arquivo atômico usando um arquivo de bloqueio é criar um arquivo exclusivo no mesmo fs (por exemplo, incorporando hostname e pid), use o link (2) para criar um link para o arquivo de bloqueio. E seligação() retorna 0, o bloqueio é bem sucedido. Caso contrário, use stat(2) no arquivo único para verificar se sua contagem de links aumentou para 2, caso em que o bloqueio também é bem-sucedido.
O_NOCTTY
E se caminho refere-se a um dispositivo terminal --- vejatty(4) --- ele não se tornará o terminal de controle do processo, mesmo que o processo não tenha um.
O_TRUNC
Se o ficheiro já existir e for um ficheiro normal e o modo aberto permitir a escrita (isto é, O_RDWR ou O_WRONLY) será truncado para o comprimento 0. Se o ficheiro for um ficheiro de dispositivo terminal ou FIFO, o sinalizador O_TRUNC é ignorado. Caso contrário, o efeito de O_TRUNC não é especificado. (Em muitas versões do Linux ele será ignorado; em outras versões, ele retornará um erro.)
O_APPEND
O arquivo é aberto no modo de anexação. Antes de cadaescrever, o ponteiro do arquivo é posicionado no final do arquivo, como selseek. O_APPEND pode levar a arquivos corrompidos em sistemas de arquivos NFS se mais de um processo anexar dados a um arquivo de uma só vez. Isso ocorre porque o NFS não suporta o acréscimo a um arquivo, portanto, o kernel do cliente precisa simulá-lo, o que não pode ser feito sem uma condição de corrida.
O_NONBLOCK ouEM ATRASO
Quando possível, o arquivo é aberto no modo sem bloqueio. Nem oabrir nem qualquer operação subseqüente no descritor de arquivo que é retornado fará com que o processo de chamada aguarde. Para a manipulação de FIFOs (pipes nomeados), veja tambémfifo(4). Este modo não precisa ter nenhum efeito em arquivos que não sejam FIFOs.
O_SYNC
O arquivo é aberto para E / S síncrona. Qualquerescrevers no descritor de arquivo resultante bloqueará o processo de chamada até que os dados tenham sido gravados fisicamente no hardware subjacente. Veja RESTRIÇÕES abaixo, no entanto.
O_NOFOLLOW
E se caminho é um link simbólico, então o aberto falha. Esta é uma extensão do FreeBSD, que foi adicionada ao Linux na versão 2.1.126. Links simbólicos em componentes anteriores do nome do caminho ainda serão seguidos. Os cabeçalhos da glibc 2.0.100 e posteriores incluem uma definição dessa sinalização; kernels anteriores a 2.1.126 irão ignorá-lo se usados .
O_DIRECTORY
E se caminho não é um diretório, porque a abertura falha. Esse sinalizador é específico do Linux e foi incluído na versão 2.1.126 do kernel, para evitar problemas de negação de serviço seopendir(3) é chamado em um dispositivo FIFO ou fita, mas não deve ser usado fora da implementação deopendir.
O_DIRECT
Tente minimizar os efeitos de cache da E / S para e desse arquivo. Em geral, isso prejudicará o desempenho, mas é útil em situações especiais, como quando os aplicativos fazem seu próprio armazenamento em cache. A E / S de arquivo é feita diretamente para / dos buffers de espaço do usuário. AE / S é síncrona, ou seja, na conclusão do ler(2) ouescrever(2) chamada do sistema, os dados são garantidos para ter sido transferido. Tamanhos de transferência e o alinhamento do buffer do usuário e do deslocamento do arquivo devem ser múltiplos do tamanho do bloco lógico do sistema de arquivos.Esse sinalizador é suportado em vários sistemas semelhantes ao Unix; suporte foi adicionado sob o Linux no kernel versão 2.4.10.Uma interface semanticamente semelhante para dispositivos de bloco é descrita emcru(8). O_ASYNC Gere um sinal (SIGIO por padrão, mas isso pode ser alterado viafcntl(2)) quando a entrada ou saída torna-se possível neste descritor de arquivo. Este recurso está disponível apenas para terminais, pseudo-terminais e soquetes. Vejofcntl(2) para mais detalhes. O_LARGEFILE Em sistemas de 32 bits que suportam o Large Files System, permita que arquivos cujos tamanhos não possam ser representados em 31 bits sejam abertos. Algumas dessas bandeiras opcionais podem ser alteradas usandofcntl depois que o arquivo foi aberto. O argumento modo especifica as permissões para usar no caso de um novo arquivo ser criado. Ele é modificado pelo processoumask da maneira usual: as permissões do arquivo criado são(modo e ~ umask). Note que este modo só se aplica a acessos futuros do arquivo recém-criado; aabrirA chamada que cria um arquivo somente leitura pode retornar um descritor de arquivo de leitura / gravação. As seguintes constantes simbólicas são fornecidas para modo : S_IRWXU 00700 usuário (proprietário do arquivo) leu, escreveu e executou permissão S_IRUSR (S_IREAD) 00400 usuário tem permissão de leitura S_IWUSR (S_IWRITE) 00200 usuário tem permissão de gravação S_IXUSR (S_IEXEC) 00100 usuário tem permissão de execução S_IRWXG 00070 group leu, escreveu e executou permissão S_IRGRP 00040 group tem permissão de leitura S_IWGRP 00020 grupo tem permissão de escrita S_IXGRP 00010 grupo tem permissão de execução S_IRWXO Outros 00007 ler, escrever e executar permissão S_IROTH 00004 outros têm permissão de leitura S_IWOTH 00002 outros têm permissão de escrita S_IXOTH 00001 outros têm permissão de execução modo deve ser especificado quandoO_CREAT está no bandeiras e é ignorado de outra forma. creat é equivalente aabrir com bandeiras igual aO_CREAT | O_WRONLY | O_TRUNC. VALOR DE RETORNO abrir ecreat retorna o novo descritor de arquivo, ou -1 se ocorreu um erro (nesse caso, errno está definido adequadamente). Observe queabrir pode abrir arquivos especiais do dispositivo, mascreat não pode criá-los - usemknod(2) em vez disso. Nos sistemas de arquivos NFS com o mapeamento UID ativado,abrir pode retornar um descritor de arquivo mas, e. ler(2) pedidos são negados comEACCES. Isso ocorre porque o cliente executaabrir verificando as permissões, mas o mapeamento UID é executado pelo servidor em solicitações de leitura e gravação. Se o arquivo for criado recentemente, seus campos atime, ctime, mtime serão configurados para a hora atual, assim como os campos ctime e mtime do diretório pai. Caso contrário, se o arquivo for modificado por causa do sinalizador O_TRUNC, seus campos ctime e mtime serão configurados para a hora atual. EEXIST caminho já existe eO_CREAT eO_EXCL foram usados. EISDIR caminho refere-se a um diretório e o acesso solicitado envolveu a escrita (ou seja,O_WRONLY ouO_RDWR está definido). EACCES O acesso solicitado ao arquivo não é permitido ou um dos diretórios caminho não permitiu a permissão de pesquisa (executar) ou o arquivo ainda não existia e o acesso de gravação ao diretório pai não é permitido. ENAMETOOLONG caminho foi muito longo. ENOENT O_CREAT não está definido e o arquivo nomeado não existe. Ou, um componente de diretório em caminho não existe ou é um link simbólico pendente. ENOTDIR Um componente usado como diretório em caminho não é, de fato, um diretório, ouO_DIRECTORYfoi especificado e caminho não era um diretório. ENXIO O_NONBLOCK | O_WRONLY está definido, o arquivo nomeado é um FIFO e nenhum processo tem o arquivo aberto para leitura. Ou o arquivo é um arquivo especial do dispositivo e não existe nenhum dispositivo correspondente. ENODEV caminho refere-se a um arquivo especial do dispositivo e nenhum dispositivo correspondente existe. (Esse é um bug do kernel do Linux - nesta situação, o ENXIO deve ser retornado.) EROFS caminho refere-se a um arquivo em um sistema de arquivos somente leitura e o acesso de gravação foi solicitado. ETXTBSY caminho refere-se a uma imagem executável que está sendo executada atualmente e o acesso de gravação foi solicitado. EFAULT caminho aponta para fora do seu espaço de endereço acessível. ELOOP Muitos links simbólicos foram encontrados na resolução caminho ouO_NOFOLLOW foi especificado, mas caminho era um link simbólico. ENOSPC caminho era para ser criado, mas o dispositivo contendo caminho não tem espaço para o novo arquivo. ENOMEM Memória do kernel insuficiente estava disponível. EMFILE O processo já possui o número máximo de arquivos abertos. ENFILE O limite do número total de arquivos abertos no sistema foi atingido. SVr4, SVID, POSIX, X / OPEN, BSD 4.3 OO_NOFOLLOW eO_DIRECTORY sinalizadores são específicos do Linux. Pode ser necessário definir o_GNU_SOURCE macro para obter suas definições. Existem muitas infelicidades no protocolo subjacente à NFS, afetando, entre outrosO_SYNC eEM ATRASO. O POSIX fornece três variantes diferentes de E / S sincronizadas, correspondentes aos sinalizadoresO_SYNC , O_DSYNC e O_RSYNC. Atualmente (2.1.130), todos são sinônimos no Linux. Erros
De acordo com
Restrições




