首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >文件描述符4和5发生了什么?

文件描述符4和5发生了什么?
EN

Stack Overflow用户
提问于 2015-06-30 03:32:14
回答 1查看 1.6K关注 0票数 2

如果使用PHP从CLI打开文件并检索文件描述符:

代码语言:javascript
复制
$fp = fopen("somefile", "r"); 
echo 0 + $fp; 

在Apache中运行mod_php,得到了预期的3。我知道0是STDIN,1是STDOUT,2是STDERR,但是当我试图打开php://fd/3php://fd/4时,会发现一个错误,表明它们不存在。

无论我是在磁盘上还是php://memory上尝试一个文件,而不是somefile,结果都不会改变。如果我使用php -rphp x.php,它也不会改变。

那么文件描述符3和4会发生什么呢?是否有一些有趣的特性潜伏在我不知道的地方,某种流包装器只存在于某些情况下?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-30 03:45:13

没什么。它是文件描述符3,正如您所想的那样。

代码语言:javascript
复制
strace -etrace=open php -r '$fp = fopen("somefile", "r"); echo 0 + $fp;'
[…]
open("/home/username/somefile", O_RDONLY)   = 3
5+++ exited with 0 +++

强制PHP资源(如文件句柄)为整数提供PHP资源标识符,而不是文件描述符。从1开始分配资源号,而不是从0开始;在CLI中运行时,前三个总是分配给STDINSTDOUTSTDERR流。虽然有一些与文件描述符的对应关系,但当您开始考虑非文件资源(如MySQL结果或没有文件句柄支持的流)(如内存或复杂包装器)时,这是巧合的。

(我不知道在CLI下第四个资源用于什么。无法通过其ID获取资源,因此很难发现它是什么。)

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31129068

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档