2013-07-11 46 views
0

之間有什麼區別我有一些代碼適用於管道和文件。 在操作結束時,我的函數應該關閉資源。pclose和fclose在php

我可以使用fclose關閉管道資源嗎? 似乎並不難於追蹤如何關閉資源,但我看到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

閱讀文檔pclose()。它用於關閉由popen()創建的流程資源,而不是一個命名管道。

如果您正在使用所謂的,命名管道,這是存儲在文件系統中的對象,使用工作:

  • posix_mkfifo()來創建它們
  • fopen()函數來打開它們
  • FCLOSE()來關閉它們

正如你看到的,創建一個FIFO它需要posix擴展這意味着它不會工作在Windows與Windows本身不支持命名管道(或posix標準一般)

+0

我有一個代碼重用的問題。現在我有了一個通用的函數,我只看到1個解決方案就是像上面那樣編寫包裝類。但它看起來像重新發明輪子。 –

+0

您可以像常規文件一樣打開,關閉和讀取/寫入管道,此功能不需要包裝。如果你想創建它們,那就是。但是,在使用命名管道時不要忘記:這在Windows上不起作用。 – hek2mgl