日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

PHP中DirectIO操作文件擴展的用法大全

瀏覽:102日期:2022-09-06 17:05:47

關于 PHP 的文件操作,我們也將是通過一系列的文章來進行學習。今天我們先學習的是一個很少人使用過,甚至很多人根本不知道的擴展,它與我們日常的文件操作有些許的不同。不過這些差別并不是我們肉眼所能直觀看到的,主要還是在于業務的需求與性能的平衡。

什么是Direct IO

Direct IO 其實是 Linux 操作系統中的一個概念。它的意思是直接操作文件流,為什么說是直接呢?其實在我們的操作系統進行文件操作的時候,并不是馬上直接就在磁盤上進行文件的讀寫,中間還有一層頁緩存。既然是緩存,那么它當然是會帶來一定的性能提升,但這也并不是完全絕對的。而直接操作就是忽略掉這一層的緩存操作,直接對磁盤上的文件進行讀寫。我們都知道,磁盤,即使是固態硬盤,它和 CPU 以及內存的處理速度之間都是有著巨大的落差的,默認的頁緩存就是用來彌補這種差距。但是頁緩存會加大 CPU 的運算操作以及占用內存,而直接操作則不會有這種問題,但是相對來說,它的速度并不能和帶緩存的文件讀取操作相媲美。

以上是關于 Direct IO 的一個簡單的理解,更詳盡的解釋大家可以參考文末參考文檔中第二條鏈接的內容并進行深入的學習。在 PHP 中,我們直接在 PECL 下載 Direct IO 擴展就可以按照擴展的正常安裝方式進行安裝使用。

創建寫入文件

既然是文件操作,那么我們首先還是來創建和寫入一些文件數據。

$fd = dio_open('./test', O_RDWR | O_CREAT);echo dio_write($fd, 'This is Test.I’m ZyBlog.Show me the money4i'), PHP_EOL;// 43print_r(dio_stat($fd));// Array// (// [device] => 64768// [inode] => 652548// [mode] => 35432// [nlink] => 1// [uid] => 0// [gid] => 0// [device_type] => 0// [size] => 43// [block_size] => 4096// [blocks] => 8// [atime] => 1602643459// [mtime] => 1602656963// [ctime] => 1602656963// )dio_close($fd);

和 f 系列的函數類似,我們需要使用一個 dio_open() 函數來打開一個文件,O_RDWR | O_CREAT 參數的意思是打開一個可讀寫文件,并且如果文件不存在的話,創建它。這兩個常量是與 Linux 中相關的直接操作文件的常量對應的,在文末的鏈接中也可以看到關于這些常量的解釋。

寫入操作也是同樣的使用一個 dio_write() 就能夠完成,它返回的內容是寫入的內容長度,這里我們寫入了 43 個字符。

dio_stat() 是返回當前文件句柄的一些信息,我們可以看到設備號 device 、uid 、 gid 、 atime 、 mtime 等一些信息,它們和我們在 Linux 中能夠看到的信息類似,其實就是這個文件的一些簡單的信息。

讀取文件

讀取文件使用非常簡單的使用一個函數就可以完成。

$fd = dio_open('./test', O_RDWR | O_CREAT);echo dio_read($fd), PHP_EOL;// This is Test.I’m ZyBlog.Show me the money4idio_close($fd);

dio_read() 函數還包含另外一個參數,可以按指定的字節長度讀取內容,這個在后面我們還會看到相關的示例。

文件操作

在文件的讀取過程中,我們有可能只需要讀取一部分的內容,或者從某一位置開始讀取文件內容,下面的操作函數就是針對這兩個方面進行操作的。

$fd = dio_open('./test', O_RDWR | O_CREAT);var_dump(dio_truncate ($fd , 20)); // bool(true)echo dio_read($fd), PHP_EOL;// This is Test.I’m ZyBdio_seek($fd, 3); echo dio_read($fd), PHP_EOL;// s is Test.I’m ZyBdio_close($fd);

其實從名稱就可以看出 dio_truncate() 就是用于截斷文件內容的。在這里我們從第 20 個字符進行截斷,然后再使用 dio_read() 讀取的內容就只是前 20 個字符的內容了。

dio_seek() 則是指定從哪一個字符開始讀取內容,我們指定開始字符位置為 3 之后,前面三個字符就不會被讀取到了。需要注意的是,dio_truncate() 會修改原始文件的內容,而 dio_seek() 則不會修改。

其它設置

$fd = dio_open(’./test’, O_RDWR | O_NOCTTY | O_NONBLOCK);dio_fcntl($fd, F_SETFL, O_SYNC);dio_tcsetattr($fd, array( ’baud’ => 9600, ’bits’ => 8, ’stop’ => 1, ’parity’ => 0));while (($data = dio_read($fd, 4))!=false) { echo $data, PHP_EOL;}// This// is// Test// .I’m// ZyBdio_close($fd);

dio_fcntl() 函數是調用的 c 函數庫中的 fcntl 函數,目的是對文件描述符執行指定的一些操作,這個操作也是以一些常量進行固定的,在這里我們使用的是 F_SETFL ,它的意思是將文件描述符標志設置為指定的值,這個 O_SYNC 表示的是如果設置了這個描述符,則對該文件的寫操盤會等到數據被寫到磁盤上才結束。當然,這個函數還可以設置很多別的操作符,大家可以參考 PHP 的官方文檔進行深入的學習。

dio_tcsetattr() 用于設置打開文件的終端屬性和波特率。 baud 表示的就是波特率,bits 表示的是位,stop 表示的是停止位,parity 表示的是奇偶校驗位。關于這方面的內容需要 《計算機組成原理》 及 《操作系統》 中的一些知識,我也并不十分地清楚,所以也就不詳細的解釋了。從這里就可以看出,大學課堂上的那些基礎課程真的是非常地重要,相信好好學過這些專業基礎課程的同學一定能馬上明白這個函數的作用。

最后,我們在 dio_read() 中使用了第二個參數來根據字節長度讀取文件內容,可以看到讀取出來的內容是一段一段的以 4 個字符長度為單位的輸出。

總結

函數的學習還是比較簡單的,核心的還是要知道這個擴展在什么業務場景下更適合使用。在文章開頭的介紹中我們已經說明了直接操作文件與普通文件操作的一些區別,在自緩存應用或者需要傳輸非常大的數據時,直接操作對于 CPU 和 內存 更加地友好。而其它情況,我們還是使用系統默認的文件操作方式就可以了。其實在大部分情況下,我們基本看不出來它們的顯著區別。所以在實際應用中,還是那句話,結合業務實際情況,選擇最佳的方案。

測試代碼:

https://github.com/zhangyue0503/dev-blog/blob/master/php/202010/source/4.PHP中DirectIO直操作文件擴展的使用.php

參考文檔:

https://www.php.net/manual/zh/book.dio.php

https://www.ibm.com/developerworks/cn/linux/l-cn-directio/

到此這篇關于PHP中DirectIO直操作文件擴展的使用的文章就介紹到這了,更多相關php擴展的使用內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: PHP
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲综合电影| 久久黄色影视| 国产精品亚洲四区在线观看 | 高清一区二区三区| 精品三级在线| 久久婷婷久久| 亚洲va中文在线播放免费| 欧洲一级精品| 蜜臀av在线播放一区二区三区| 伊人精品久久| 精品国产中文字幕第一页| 日韩精品欧美成人高清一区二区| 亚洲欧美日韩专区| 日韩精品亚洲专区在线观看| 日韩中出av| 精品视频高潮| 999久久久国产精品| 成人av二区| 日日夜夜免费精品视频| 欧美激情99| 久久精品1区| 亚洲精品午夜av福利久久蜜桃| 另类av一区二区| 久久精品国内一区二区三区| 欧美不卡在线| 婷婷综合一区| a国产在线视频| 日本亚洲欧美天堂免费| 国产一区二区三区网| 国产免费成人| 国产中文欧美日韩在线 | 国产精品一区三区在线观看| 日韩中文欧美| 日本成人中文字幕| 精品一区av| 久久午夜精品| 在线人成日本视频| 日韩欧美激情电影| 久久久777| 麻豆国产精品一区二区三区| 激情91久久| 国产精品毛片久久| 日韩av黄色在线| 9久re热视频在线精品| 成人三级高清视频在线看| 日韩国产一区二| av不卡免费看| 亚洲91视频| 国产黄大片在线观看| 日本亚洲三级在线| 国产精品激情| 91看片一区| 欧美日韩中出| 国产精品99精品一区二区三区∴| 亚洲人成亚洲精品| 一本综合精品| 色乱码一区二区三区网站| 亚洲欧美伊人| 国产精品成人3p一区二区三区| 久久国产电影| 亚洲影院天堂中文av色| 国产一区二区亚洲| 国产日韩综合| 久久久91麻豆精品国产一区| 狠狠久久婷婷| 国产九九精品| 欧美一级网址| 91国内精品| 欧美精品三级在线| 亚洲视频二区| 欧美日韩一区二区综合| 精品亚洲成人| 青青在线精品| 亚洲aa在线| 综合欧美精品| 蜜桃av一区二区三区电影| 蜜桃av一区二区| 欧美天堂一区二区| 国产精品毛片aⅴ一区二区三区| 亚洲专区在线| 中文字幕av一区二区三区四区| 午夜一级在线看亚洲| 亚洲精品欧美| 麻豆精品国产91久久久久久| 国产精品三级| 91一区二区| 尹人成人综合网| 日韩高清一区在线| 91亚洲精品在看在线观看高清| 国产精品嫩草99av在线| 视频一区中文| 日韩影院精彩在线| 怡红院精品视频在线观看极品| 99成人在线| 免费在线观看一区二区三区| 另类中文字幕国产精品| 欧美一区久久久| 色爱综合网欧美| 国产在线|日韩| 日本在线观看不卡视频| 激情综合五月| 亚洲一区二区三区中文字幕在线观看| 午夜欧美在线| 亚洲制服欧美另类| 日韩精品一页| 亚洲二区视频| 精品五月天堂| 伊人精品久久| 久草免费在线视频| 美美哒免费高清在线观看视频一区二区 | 日韩欧美午夜| 国产美女久久| jiujiure精品视频播放| 国产麻豆一区| 亚洲区国产区| 亚洲在线国产日韩欧美| 国产成人精选| 日韩av网站在线免费观看| 欧美日韩尤物久久| 国产激情精品一区二区三区| 免费在线观看一区二区三区| 亚洲特色特黄| 国产一区二区久久久久| 亚洲乱码视频| 在线亚洲免费| 在线日韩电影| 久久久影院免费| 久久天堂成人| 国产在线看片免费视频在线观看| 国产日产高清欧美一区二区三区| 免费中文字幕日韩欧美| 日本精品影院| 国产乱码午夜在线视频| 捆绑调教美女网站视频一区| 国产精品一区二区免费福利视频 | 亚洲精品精选| 99pao成人国产永久免费视频| 私拍精品福利视频在线一区| 97欧美在线视频| 日韩一区欧美| 日韩精品久久久久久久电影99爱| 国产精品地址| 国产福利91精品一区二区| 久久伊人亚洲| 久久国产精品美女| 福利在线一区| 亚洲欧美一区在线| 亚洲精品乱码日韩| 亚洲毛片在线| 国产精品v日韩精品v欧美精品网站 | 88久久精品| 色偷偷偷在线视频播放| 激情婷婷欧美| 偷拍亚洲精品| 精品一区二区三区视频在线播放 | 国产高清不卡| 99国产精品视频免费观看一公开| 中文字幕亚洲精品乱码| 国产精品99久久免费| 中文字幕在线视频久| 99视频一区| 久久精品国产精品亚洲毛片| 久久国产亚洲精品| 欧美午夜网站| 妖精视频成人观看www| 国产精品久久久久毛片大屁完整版| 亚洲黄色网址| 国产亚洲高清一区| 99国产精品久久久久久久| 国产欧美日韩精品一区二区三区| 色爱av综合网| 久久精品理论片| 日韩av网站在线观看| 午夜影院欧美| 四虎8848精品成人免费网站| 亚洲+小说+欧美+激情+另类| 在线观看精品| 精品欧美日韩精品| 亚洲a级精品| 亚洲激情另类| 在线一区视频观看| 国产不卡精品| 国产精品极品| 日本精品在线播放| 最新日韩av| 亚洲韩日在线| 日韩电影二区| 成人福利一区 | 黄色av一区| 久久美女性网| 91精品一区国产高清在线gif | 在线亚洲免费| 99xxxx成人网| 亚洲免费在线| 一本色道精品久久一区二区三区| 黄色在线观看www| 精品亚洲精品| 国产一区丝袜| 国产精品v一区二区三区| 日韩精品a在线观看91|