PHP Conference China 2020

dio_open

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

dio_openBelirtilen dosyayı açar ve bu dosya için bir dosya tanıtıcısı döndürür

Açıklama

dio_open ( string $dosyaismi , int $seçenekler [, int $kip = 0 ] ) : resource

dio_open() işlevi, C kütüphanesinin girdi/çıktı akımlarıyla ilgili işlevlerinde kullanılmak üzere belirtilen dosyayı düşük seviyede açar (gerekirse oluşturur) ve bu dosya için bir dosya tanıtıcısı döndürür.

Değiştirgeler

dosyaismi

Açılacak dosyanın yolu.

seçenekler

Aşağıdaki seçeneklerin bir birleşimi (bit seviyesinde VEYAlanmışı) olarak belirtilebilir. Bu değer, aşağıdaki diğer seçeneklere ek olarak O_RDONLY, O_WRONLYveya O_RDWR sabitlerinden birini mutlaka içermelidir.

  • O_RDONLY - Dosyayı okuma erişimli açar.

  • O_WRONLY - Dosyayı yazma erişimli açar.

  • O_RDWR -Dosyayı hem okuma hem de yazma erişimli açar.

  • O_CREAT - mevcut değilse dosyayı oluşturur.

  • O_EXCL - dosya mevcutsa ve O_CREAT ile O_EXCL birlikte belirtilmişse dosya mevcut demektir, bu durumda işlev başarısız olur.

  • O_TRUNC - dosya mevcutsa ve dosya yazmak için açılmışsa dosya içeriği sıfırlanır (dosya boyutu sıfır bayt olur).

  • O_APPEND - veri daima dosyanın sonuna yazılır.

  • O_NONBLOCK - engellenmeyen kip geçerli olur.

  • O_NOCTTY - Bir TTY aygıt dosyası açılırken işletim sisteminin açılmış dosyayı sürecin denetim uçbirimi olarak atamasını önler.

kip

seçenekler değiştirgesine O_CREAT atanmışsa dosya kipi (oluşturma izinleri) kip değiştirgesinde belirtildiği gibi ayarlanır. kip olarak O_CREAT belirtilmişse kip doğru işlem için gereklidir, yoksa yok sayılır.

Oluşturlacak dosyaya atanacak asıl izinler, normal olarak sürecin umask değerinden etkilenir.

Dönen Değerler

Bir hata oluşmuşsa FALSE, aksi takdirde dosya tanıtıcısı döner.

Örnekler

Örnek 1 - Bir dosya tanıtıcısının açılması

<?php

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

dio_close($fd);
?>

Ayrıca Bakınız

  • dio_close() - Belirtilen dosya tanıtıcısını kapatır

add a note add a note

User Contributed Notes 4 notes

up
4
Marius Karthaus
10 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
2
j at pureftpd dot org
15 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
0
Anonymous
8 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
-9
alla at cyber dot com dot au
17 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