PHP Conference Japan 2024

stream_set_blocking

(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)

stream_set_blocking设置流的阻塞/非阻塞模式

描述

stream_set_blocking(资源 $stream, 布尔值 $enable): 布尔值

设置stream的阻塞或非阻塞模式。

此函数适用于任何支持非阻塞模式的流(目前,包括常规文件和套接字流)。

参数

stream

流。

enable

如果enablefalse,则给定流将切换到非阻塞模式;如果为true,则将切换到阻塞模式。这会影响从流中读取的fgets()fread()等调用。在非阻塞模式下,fgets()调用将始终立即返回,而在阻塞模式下,它将等待数据在流中可用。

返回值

成功时返回true,失败时返回false

注释

注意:

在Windows上,这对本地文件没有影响。Windows不支持本地文件的非阻塞IO。

参见

  • stream_select() - 在给定的流数组上运行等效于select()系统调用的操作,超时时间由秒和微秒指定
添加注释

用户贡献的注释 2 条注释

MagicalTux at ookoo dot org
18 年前
当你在非阻塞流上使用fwrite()时,数据不会像t.starling所说的那样被静默丢弃。

记住fwrite()返回一个整数,这个整数表示实际写入流的数据量。因此,如果你看到fwrite()返回的数据量小于写入的数据量,这意味着你将来必须再次调用fwrite()来写入剩余的数据量。

你可以使用stream_select()来等待流可用于写入,然后继续向流写入数据。

非阻塞流很有用,因为你可以拥有多个非阻塞流,并等待它们可用于写入。
To Top