我正在使用一个使用 threads 的 Perl 脚本。和 threads::shared .我想从一个单独的线程打开的文件句柄中读取,但是 threads::shared不能承认它是共享标量的值。
我在想也许我可以简单地分享 fileno 的结果到另一个线程,然后让它读取它。问题是我不知道如何处理这个数字。如果答案在文档中,我可能没有在寻找正确的东西,因为我还没有找到它。 如何从其fileno 中获取实际的文件句柄?值(value)?
如果这不可能,有没有办法在创建两个线程后打开文件句柄并将其传递给另一个线程?
提前感谢您的任何建议。
最佳答案
使用 open :
If you specify
'<&=X'
, whereX
is a file descriptor number or a filehandle, then Perl will do an equivalent of C'sfdopen
of that file descriptor
my $fileno = 0;
open(my $stdin, "<&=$fileno"); # 2-argument form
open(my $stdin, "<&=", $fileno); # or use 3-argument form
如果您更喜欢面向对象的方法,可以使用 IO::File和 fdopen
或 new_from_fd
方法(正如鲍罗丁指出的那样):
use IO::File;
my $stdin = IO::File->new_from_fd($fileno, 'r');
关于multithreading - 如何从 Perl 中的 fileno 获取文件句柄?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25337590/