CascadiaPHP 2024

dio_open

(PHP 4 >= 4.2.0, PHP 5 < 5.1.0)

dio_open Abre um arquivo (criando-o, se necessário) em um nível mais baixo do que as funções de entrada/saída da biblioteca C permitem

Descrição

dio_open(string $filename, int $flags, int $mode = 0): resource

dio_open() abre um arquivo e retorna um novo descritor de arquivo para ele.

Parâmetros

filename

O caminho do arquivo a ser aberto.

flags

O parâmetro flags é um valor resultante da operação OR bit a bit compreendendo flags da seguinte lista. Esse valor deve incluir um dos O_RDONLY, O_WRONLY ou O_RDWR. Adicionalmente, pode incluir qualquer combinação de outras flags desta lista.

  • O_RDONLY - abre o arquivo para acesso somente leitura.

  • O_WRONLY - abre o arquivo para escrita.

  • O_RDWR - abre o arquivo para leitura e escrita.

  • O_CREAT - cria o arquivo, se ele ainda não existe.

  • O_EXCL - se ambos O_CREAT e O_EXCL estiverem definidos e o arquivo já existir, dio_open() falhará.

  • O_TRUNC - se o arquivo existir e for aberto para acesso de escrita, o arquivo será truncado para o comprimento zero.

  • O_APPEND - operações de escrita gravam dados no final do arquivo.

  • O_NONBLOCK - define o modo não bloqueante.

  • O_NOCTTY - impede que o sistema operacional atribua o arquivo aberto como o terminal de controle do processo ao abrir um arquivo de dispositivo TTY.

mode

Se flags contiver O_CREAT, mode definirá as permissões do arquivo (permissões de criação). mode é necessário para a operação correta quando O_CREAT é especificado em flags e é ignorado caso contrário.

As permissões reais atribuídas ao arquivo criado serão afetadas pela configuração do umask do processo como de costume.

Valor Retornado

Um descritor de arquivo ou false em caso de erro.

Exemplos

Exemplo #1 Abrindo um descritor de arquivo

<?php

$fd
= dio_open('/dev/ttyS0', O_RDWR | O_NOCTTY | O_NONBLOCK);

dio_close($fd);
?>

Veja Também

  • dio_close() - Fecha o descritor de arquivo fornecido por fd

add a note

User Contributed Notes 4 notes

up
4
j at pureftpd dot org
19 years ago
Please note that dio_open()/dio_write()/dio_close() is *faster* than fopen()/fwrite()/fclose() for files.

fwrite() has to manage a 8k buffer, while dio_write() just issue a single write(). The end result is less system calls and less memory access.

Also, giving the full size to write() as with dio_write() let filesystems properly use preallocation in order to avoid fragmentation.
up
2
Marius Karthaus
14 years ago
One of the prominent reasons to use direct IO, is for it's ability to do actual direct IO, bypassing the operating system cache and getting the data from the disk directly.
The flag to do that (O_DIRECT) is missing from the documentation above. Maybe for good reasons, because this type of IO only works on blockdevices, not on files, and should only be used if you are **really** sure what you are doing.
up
0
Anonymous
12 years ago
"The prominent reason" to use direct I/O is when your application provides its own cache feature, so you won't do double caching
up
-12
alla at cyber dot com dot au
21 years ago
To specify a combination of flags you OR them together.
This was the only way I could get it to append:

$fd = dio_open($file, O_WRONLY | O_APPEND);
To Top