【问题标题】:fopen and getting system file descriptorfopen 并获取系统文件描述符
【发布时间】:2011-08-01 19:55:44
【问题描述】:

我想在使用 open 打开文件时获取返回资源的系统文件描述符。我假设描述符是一个 INT 值,通常在 /dev/fd/

我知道我可以通过执行以下操作从描述符中读取:

fread("php://fd/$descriptor", $buflen);

但现在我想获取由 PHP 的 fopen() 打开的资源的描述符。有什么办法吗?

【问题讨论】:

  • stat() 不会返回任何 FD 信息。它纯粹使用磁盘上的文件元数据详细说明,这些都与谁持有文件的打开句柄无关。该信息是从操作系统的文件系统处理程序中检索到的。
  • 谢谢,我已经相应地编辑了我的帖子。但我希望有一种方法可以从 PHP fopen 句柄中获取系统文件描述符。
  • 有什么理由需要这些信息吗?突破抽象层并不是一个好主意。
  • 我正在使用 PHP 的 fuse wrapper 编写一个基本的文件系统。它似乎需要那里的文件描述符而不是 PHP 的描述符。

标签: php file fopen file-descriptor


【解决方案1】:

这是一种相当老套的方法,但它确实有效!

function fd($realpath) {
  $dir = '/proc/self/fd/';
  if ($dh = opendir($dir)) {
      while (($file = readdir($dh)) !== false) {
          $filename = $dir . $file;
          if (filetype($filename) == 'link' && realpath($filename) == $realpath) {
            closedir($dh);
            return $file;
          }
      }
      closedir($dh);
  }
  return FALSE;
}

【讨论】:

    【解决方案2】:

    因为您正在编写保险丝包装器,请考虑not duplicating the effort of this PECL extension。当然,它也没有任何奇怪的文档,所以这充其量只是在黑暗中刺伤。

    【讨论】:

      猜你喜欢
      • 2012-03-27
      • 2021-06-24
      • 2020-01-05
      • 2014-05-08
      • 1970-01-01
      • 2017-02-12
      • 1970-01-01
      • 1970-01-01
      • 2023-03-04
      相关资源
      最近更新 更多