update page now

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 — функция dio_open() выдаст ошибку, если установили флаги O_CREAT и O_EXCL, и файл существует.

  • O_TRUNC — при открытии существующего файла на запись функция усечёт файл до нулевой длины.

  • O_APPEND — запись в конец файла.

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

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

mode

При передаче в параметр flags значения O_CREAT параметр mode установит для файла права доступа с учётом системных ограничений на установку прав для вновь создаваемых файлов. Параметр mode требуется для правильной работы функции при передаче в параметр flags значения O_CREAT, а в остальных случаях игнорируется.

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

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

Функция возвращает дескриптор файла или false, если возникла ошибка.

Примеры

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

<?php

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

dio_close($fd);

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

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

Добавить

Примечания пользователей 3 notes

up
4
j at pureftpd dot org
21 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
16 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
14 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
To Top