CakeFest 2024: The Official CakePHP Conference

dio_open

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

dio_open Öffnet eine Datei (falls nötig, wird diese erzeugt) auf einem niedrigeren Level als es die C-Bibliotheks Ein-/Ausgabe-Stream-Funktionen erlauben

Beschreibung

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

dio_open() öffnet eine Datei und liefert einen Dateideskriptor zurück.

Parameter-Liste

filename

Der Pfadname der zu öffnenden Datei.

flags

Der Parameter flags ist ein bitweise ODER verknüpfter Wert bestehend aus Flags der folgende Liste. Dieser Wert muss entweder O_RDONLY, O_WRONLY, oder O_RDWR enthalten. Zusätzlich kann er eine beliebige Kombination der anderen Flags dieser Liste enthalten.

  • O_RDONLY - öffnet die Datei zum Lesezugriff.

  • O_WRONLY - öffnet die Datei zum Schreibzugriff.

  • O_RDWR - öffnet die Datei zum Lesen und Schreiben.

  • O_CREAT - erzeugt die Datei, falls diese nicht existiert

  • O_EXCL - wird sowohl O_CREAT als auch O_EXCL angegeben und die Datei existiert bereits, schlägt dio_open() fehl.

  • O_TRUNC - falls die Datei bereits existiert, und sie für Schreibzugriff geöffnet wird, wird diese auf die Grösse 0 zurückgesetzt

  • O_APPEND - setzt den Zeiger für Schreiboperationen an das Ende der Datei

  • O_NONBLOCK - Setzt den Modus auf "nonblocking"

  • O_NOCTTY - hält das Betriebssystem davon ab, die geöffnete Datei als Prozess steuerndes Terminal zuzuweisen, wenn eine TTY Gerätedatei geöffnet wird.

mode

Wenn flags das Flag O_CREAT enthält, setzt mode die Dateizugriffsrechte. mode wird für die korrekte Ausführung benötigt, wenn O_CREAT in flags angegeben wird, und wird ansonsten ignoriert.

Die tatsächlichen Dateizugriffsrechte, die der erzeugten Datei zugewiesen werden, werden von der umask Einstellung des Prozesses wie üblich beeinflusst.

Rückgabewerte

Ein Dateideskriptor oder false bei Fehlern.

Beispiele

Beispiel #1 Öffnen eines Dateideskriptors

<?php

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

dio_close($fd);
?>

Siehe auch

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