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() 系统调用的操作,并指定秒和微秒的时间限制
添加注释

用户贡献的注释 3 个注释

33
匿名
11 年前
在 Windows 上,此函数不适用于使用 proc_open 打开的管道 (https://bugs.php.net/bug.php?id=47918, https://bugs.php.net/bug.php?id=34972, https://bugs.php.net/bug.php?id=51800)
14
MagicalTux at ookoo dot org
17 年前
当您对非阻塞流使用 fwrite() 时,数据不会像 t dot starling 所说那样被静默丢弃。

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

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

非阻塞流很有用,因为您可以拥有多个非阻塞流,并等待它们可用于写入。
-39
ayon at hyurl dot com
7 年前
需要注意的是,stream_set_blocking() 和 stream_set_timeout() 不适用于标准 I/O 流,例如 STDIN 和 STDOUT。
To Top