打开文件和获取系统文件描述符

7

当我使用open打开文件时,我希望获得返回资源的系统文件描述符。我假设这个描述符是一个INT值,通常位于/dev/fd/中。

我知道可以通过以下方式从描述符中读取:

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

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


stat() 不会返回任何FD信息。它仅涉及磁盘上的文件元数据,其中没有任何关于谁持有文件打开句柄的信息。这些信息是从操作系统的文件系统处理程序中检索的。 - Marc B
1
谢谢,我已经相应地编辑了我的帖子。但是我希望有一种方法可以从PHP fopen句柄中获取系统文件描述符。 - Subrat Basnet
你需要这个信息的原因是什么?突破抽象层很少是一个好主意。 - Marc B
我正在使用PHP的fuse包装器编写一个基本文件系统。它似乎需要文件描述符而不是PHP的描述符。 - Subrat Basnet
2个回答

4
这是一个比较巧妙的解决方法,虽然有些不规范,但确实有效!
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;
}

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接