CakeFest 2024: The Official CakePHP Conference

dio_open

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

dio_open Открывает файл (по необходимости создаёт) на более низком уровне нежели потоковые функции ввода/вывода языка C

Описание

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

dio_open() открывает файл и возвращает его дескриптор.

Список параметров

filename

Путь открываемого файла.

flags

Параметр flags задаётся побитовой комбинацией констант. Он должен включать одну из констант O_RDONLY, O_WRONLY или O_RDWR. Дополнительно он может содержать другие константы.

  • O_RDONLY - открыть файл на чтение.

  • O_WRONLY - открыть файл на запись.

  • O_RDWR - открыть файл на чтение и запись.

  • O_CREAT - создать файл, если его не существует.

  • O_EXCL - если заданы и O_CREAT и O_EXCL и файл существует, то dio_open() завершится с ошибкой.

  • O_TRUNC - если файл существует и был открыт на запись, то он будет обрезан до нулевой длины.

  • O_APPEND - операции записи будут происходить в конец файла.

  • O_NONBLOCK - установить неблокирующий режим.

  • O_NOCTTY - запрещает операционной системе считать открытый файл за терминал контроля процесса, если был открыт файл устройства TTY.

mode

Если flags содержит O_CREAT, mode установит разрешения для файла (creation permissions). mode требуется для корректной работы в случае указания O_CREAT в flags и в других случаях будет проигнорирован.

Актуальные разрешения, которые будут присвоены созданному файлу, будут зависеть от настройки umask процесса, как обычно.

Возвращаемые значения

Файловый дескриптор или false в случае возникновения ошибки.

Примеры

Пример #1 Открытие файлового дескриптора

<?php

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

dio_close($fd);
?>

Смотрите также

  • dio_close() - Закрыть файловый дескриптор

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
11 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