PHP 8.4.1 Released!

dio_open

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

dio_openOuvre un nouveau fichier avec les permissions spécifiées

Description

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

Ouvre un accès à un fichier et retourne une ressource de fichier.

Liste de paramètres

filename

Le chemin vers le fichier à ouvrir.

flags

Le paramètre flags est une valeur comprenant des drapeaux depuis la liste suivante. Cette valeur doit inclure une constante parmi O_RDONLY, O_WRONLY, ou O_RDWR. À cette constante, vous pouvez y ajouter n'importe quel drapeaux depuis cette liste.

  • O_RDONLY : ouvre le fichier en lecture seule.

  • O_WRONLY : ouvre le fichier en écriture.

  • O_RDWR : ouvre le fichier en lecture et écriture.

  • O_CREAT : crée le fichier, s'il n'existe pas.

  • O_EXCL : si O_CREAT et O_EXCL sont utilisés et que le fichier existe, dio_open() échouera.

  • O_TRUNC : si le fichier existe et qu'il est ouvert en écriture, le fichier sera réduit à la taille nulle.

  • O_APPEND : les écritures se font à partir de la fin du fichier.

  • O_NONBLOCK : active le mode non-bloquant.

  • O_NOCTTY : évite que le système d'exploitation n'assigne au fichier ouvert un processus contrôlant le terminal lorsque ce fichier est un fichier TTY.

mode

Si flags contient O_CREAT, mode définira les permissions du fichier (permissions de création). mode est requis pour une opération correcte lorsque O_CREAT est spécifié dans le flags et est ignoré sinon.

Les permissions assignées au fichier créé seront affectées par la configuration du processus umask.

Valeurs de retour

Une ressource de fichier ou false en cas d'erreur.

Exemples

Exemple #1 Ouverture d'un fichier

<?php

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

dio_close($fd);
?>

Voir aussi

add a note

User Contributed Notes 3 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
To Top