php中的pclose和fclose有什么区别

时间:2013-07-11 17:30:30

标签: php resources pipe

我有一些适用于管道和文件的代码。 在操作结束时,我的函数应该关闭资源。

我可以使用fclose关闭管道资源吗? php似乎并不难追踪如何关闭资源 我看到了2个功能。

我用popen函数创建管道。

否则我需要一种方法来区分管道和文件资源。

get_resource_type returns "stream" for both resources.

或者我必须实现昂贵的包装类。

class PipeStream {
    public function __desctruct() { pclose($this->resource); }
}
class FileStream {
    public function __desctruct() { fclose($this->resource); }
}

1 个答案:

答案 0 :(得分:1)

阅读pclose()的文档。它用于关闭由popen()而不是命名管道创建的流程资源。

如果您正在处理所谓的命名管道,它们是存储在文件系统中的对象,请使用:

  • posix_mkfifo()创建它们
  • fopen()打开它们
  • fclose()关闭它们

如您所见,要创建一个fifo,它需要posix扩展名,这意味着它不能在Windows上运行,因为Windows本身不支持命名管道(或一般的posix标准)