Skip to main content

Comando Open Linux e Comando Unix

Linux Command-Line for Beginners: Your First 5 Minutes (Junho 2026)

Linux Command-Line for Beginners: Your First 5 Minutes (Junho 2026)
Anonim

Sinopse

#incluir #incluir #incluir int aberto (const char * caminho int bandeiras ); int aberto (const char * caminho int bandeiras , mode_t modo ); int creat (const char * caminho , mode_t modo );

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.

Erros

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.

De acordo com

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.

Restriçõ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.