当前位置: 首页 > 知识库问答 >
问题:

在PHP中打开命名管道时如何防止fopen()挂起

胡彭亮
2023-03-14

我有一个命名管道文件,如下所示:

prw-r--r-- 1 root root 0 Aug 11 17:01 /tmp/debug

当我在PHP中执行类似操作时:

$fp = fopen("/tmp/debug", "r");

它挂起(即永不返回)。是否有办法使此呼叫返回和/或超时?

(编辑)

请注意,我希望一个进程以写权限打开此管道,另一个进程以读权限打开此管道。有人在向这根管子写信,而另一个人在从这根管子读书。问题是读者有时会挂在fopen()上——不管它成功与否,我总是想返回它。

共有1个答案

米楷
2023-03-14

http://php.net/manual/en/function.stream-set-timeout.php

注意:

注意:为了便于移植,强烈建议您在使用fopen()打开文件时始终使用'b'标志。

也许这会有帮助。

另外,阅读这篇文章如何在PHP中使用命名管道在不同的函数甚至不同的进程之间没有分叉?

 类似资料:
  • 问题内容: 如果我有一个程序创建并尝试使用mkfifo打开命名管道,那么如何打开管道以进行读取或写入而不会阻塞? 具体来说,我正在编写一个可以在有或没有gui(用Java编写)的情况下运行的C程序。 在C程序中,我使用mkfifo成功创建了命名管道,但是当我这样做时 在GUI打开该管道进行写入之前,fopen不会返回。我想做的是让该管道准备好被读取一次(如果GUI决定将其写入)-我将把文件描述符放

  • 问题内容: 如何在node.js中创建命名管道? PS:目前,我正在按如下方式创建命名管道。但是我认为这不是最好的方法 问题答案: 看起来,Node核心不支持名称管道-从Ben Noordhuis 11/10/11开始: Windows具有命名管道的概念,但是自您提到以来,我假设您的意思是UNIX FIFO。 我们不支持它们,可能永远也不会(在非阻塞模式下的FIFO可能会死锁事件循环),但是如果您

  • 问题内容: 目前,我正在使用内置于python的应用程序。当我在个人计算机上运行它时,它不会出现问题。 但是,当我将其移至生产服务器时。它不断向我显示以下错误: 我进行了一些研究,得出的原因是,当服务器仍在忙于发送数据时,最终用户浏览器会停止连接。 我想知道为什么会发生这种情况,以及根本原因是什么导致它无法在生产服务器上正常运行,而我的计算机却可以正常运行。任何建议表示赞赏 问题答案: 您的服务器

  • 问题内容: 使用不同的Java库执行数百万个HTTP请求,使我陷入困境: 这是功能。 我试图设置Apche Http Client,并在所有可能的超时(我希望)上超时,但仍然 (可能无限)挂起。如何摆脱它们? 挂断率大约是每10000个请求〜1(对10000个不同的主机),并且可能会永远持续下去(我已确认线程挂起在10小时后仍然有效)。 Windows 7上的JDK 1.8。 我的工厂: 我的工厂

  • 主要内容:使用命名管道双向通信管道是用于相关过程之间的通信。 我们是否可以使用管道进行不相关的进程通信,比方说,我们要从一个终端执行客户端程序,从另一个终端执行服务器程序? 答案是否定的。那么怎样才能实现不相关的进程通信,简单的答案就是使用 命名管道。 即使这适用于相关的进程,但是使用命名管道进行相关的进程通信没有任何意义。 我们使用一个管道进行单向通信,两个管道进行双向通信。 命名管道是否适用相同的条件。 答案是否定的,我们

  • 问题内容: 我正在使用ColdFusion MX7对某些Java 6代码执行CFEXECUTE。 不幸的是,由于CF7在JDK 6下不起作用,所以我必须这样做。 我的问题是,如果在Java代码中发生异常,如果我在异常上调用a ,则CFEXECUTE命令会挂起。ColdFusion最终超时,但是Java进程继续在后台挂起。 我猜有一些障碍正在发生,但我似乎无法弄清楚为什么。 如果我不这样做,那么一切