当前位置:首页 > PHP > 正文内容

php8.1引入fsync函数/fdatasync函数的作用

高老师4年前 (2022-01-07)PHP2309

php8.1引入了了两个函数,分别为fsync和fdatasync,主要是为了PHP提供更强大IO控制能力。我们通常使用fwrite函数来对文件进行写入操作,我们认为该函数一旦返回成功,数据便已经写到了文件中,事实上是不太正确的。文件的write操作,更新的只是内存中的页缓存,而脏页不会立即更新到硬盘中,而是由操作系统统一调度。

于是一般情况下我们的写入操作如下:

(1).数据复制到其中一个缓冲区中,缓冲区未满不会动

(2).缓存区满了再将该缓冲排入到输出队列,数据到达队首时,才进行实际的I/O操作

因此很多时候我们的程序只是走到第一步,其他的由操作系统来自行处理。

但是很多应用程序对文件写入的要求非常高,不允许丢失数据,比如数据库。于是UNIX提供了3个api,分别是sync/fsync/fdatasync函数。

sync函数:

sync函数主动将所有修改过的块缓冲区排入写队列就完事儿,剩下的由操作系统来

fsync函数:

fsync函数只对由文件描述符filedes指定的单一文件起作用,并且等待写磁盘操作结束,然后返回。(非常适合数据库,一定能保证写入到磁盘)

fdatasync函数:

fdatasync函数类似于fsync,但它只影响文件的数据部分。而除数据外,fsync还会同步更新文件的属性。

因此对于PHP8.1版本文件写入有要求的可以使用新的api了:

<?php
$file = 'gao.txt';
$stream = fopen($file, 'w');
fwrite($stream, '高三峰');
fwrite($stream, "\r\n");
fsync($stream);
fclose($stream);

扫描二维码推送至手机访问。

版权声明:本文由高久峰个人博客发布,如需转载请注明出处。

本文链接:https://blog.20230611.cn/post/214.html

分享给朋友:

“php8.1引入fsync函数/fdatasync函数的作用” 的相关文章

php异步执行,php后台运行,如何在windows下让php后台运行

php异步执行,php后台运行,如何在windows下让php后台运行

如果想在windows中执行php,并且让php脚本在后台运行,可以用下面的cmd命令start /b php  D:\wwwroot\default\demo1\run.php例如上面的命令意思后台运行run.php,如果想用php编写异步代码: ...

PHP获取站点根目录,PHP获取应用根目录,cgi和cli都支持

PHP获取站点根目录,PHP获取应用根目录,cgi和cli都支持

重构框架的时候想要考虑支持下cli模式,于是参考了thinkphp的底层。/**  * 获取应用根目录  * @return string  */ public static function getRootP...

php new class

php new class

<?php $member = new class {     public function getInfo()     {    ...

php代理下载,php代下载文件,php下载远程文件,php远程文件下载

php代理下载,php代下载文件,php下载远程文件,php远程文件下载

经常我们下载国外资源容易被墙,可以通过php脚本获取远程文件流然后输出给我们的浏览器来下载。<?php //设置下载文件的url $url = 'https://mirrors.huaweicloud.com/ubuntukylin/ubuntukylin-19....

php端口复用,php socket端口复用

php端口复用,php socket端口复用

第一次听说端口复用是在mixphp最新版本中发现的,mixphp启动监听9501端口,现在作者说可以多开几个进程来执行mixphp,我心里想了下再启动不是会端口冲突嘛,但是却没有问题,于是下载mixphp的源码解读,原来是启动http服务器使用new Co\Http\Server('0.0....

php迭代器返回值,php yield getReturn

php迭代器返回值,php yield getReturn

php生成器的方法getReturn获取生成器迭代完成后的返回值,当生成器迭代完成会将生成器的返回值返回,因此如果迭代器未进行迭代是获取不到值的,如果你没有return值则返回null,参考代码:<?php function G1() {    &nbs...