函数说明(fileno)

  • fileno FILEHANDLE

这个函数返回在一个文件句柄下面的文件描述符。如果该文件句柄没有 open,那么 fileno 返回 undef。文件描述符是一个很小的,非负整数,比如 0 或 1,分别对应 STDIN 和 STDOUT,后者是符号。糟糕的是,操作系统可不认得你这些酷酷的符号。它只会用这样的小小的文件数字思维来打开文件,并且尽管 Perl 通常会自动为你做转换,但是偶尔你还是需要知道实际的文件描述符。

因此,举例来说,fileno 函数对于为select 构造位图以及在实现了 syscall(2) 的情况下传递某些晦涩的系统调用来说是非常有用的。它还可以用于检查 open 函数给你的文件描述符是不是你想要的那个,以及判断两个文件句柄是否在使用同一个文件描述符。

   if (fileno(THIS) == fileno(THAT) ) {
      print "THIS and THAT are dups\n";
   }

如果 FILEHANDLE 是一个表达式,那么该值就会被当作一个间接的文件句柄,通常是它的名字或者一个指向某些构成一个文件句柄对象的引用。

一个警告:在程序的整个生命期里都不要依赖 Perl 文件句柄和数字文件描述符之间的关联关系。如果一个文件关闭以后重新打开,那么文件描述符可能改变。Perl 在保证某些文件描述符不会因为对它们的 open 失败而丢失的时候碰到了一些麻烦,它现在只能对那些不超过当前特殊变量 $^F($SYSTEM_FD_MAX)的当前值(缺省是 2)的文件描述符保证这一点。尽管文件句柄 STDIN, STDOUT,和 STDERR 从文件描述符 0,1,和 2 开始(Unix 标准传统),但如果你非常随意地打开和关闭它们的话,那么它们都有可能改变。只要你总是在关闭以后马上重新打开,那么你在 0,1,和 2 上不会碰到麻烦。在 Unix 系统上,基本规则是先用最小的描述符,而那个会是你刚刚关闭的那个。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值