我正在使用使用threadsthreads::shared的Perl脚本。我想从一个单独的线程打开的文件句柄中读取内容,但是threads::shared不能将其视为共享标量的值。

我在想,也许我可以简单地将fileno的结果共享给另一个线程,然后让它读取它。问题是我不知道该怎么办。如果答案在文档中,则可能是因为我还没有找到合适的东西。 如何从fileno值获取实际的文件句柄?

如果这不可能,那么在创建两个线程之后是否可以打开文件句柄并将其传递给另一个线程?

在此先感谢您的任何建议。

最佳答案

使用open:


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 方法(如Borodin所指出的):
use IO::File;
my $stdin = IO::File->new_from_fd($fileno, 'r');

关于multithreading - 如何从Perl中的fileno获取文件句柄?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25337590/

10-10 20:57