multithreading - 如何从 Perl 中的 fileno 获取文件句柄?

标签 multithreading perl

我正在使用一个使用 threads 的 Perl 脚本。和 threads::shared .我想从一个单独的线程打开的文件句柄中读取,但是 threads::shared不能承认它是共享标量的值。

我在想也许我可以简单地分享 fileno 的结果到另一个线程,然后让它读取它。问题是我不知道如何处理这个数字。如果答案在文档中,我可能没有在寻找正确的东西,因为我还没有找到它。 如何从其fileno 中获取实际的文件句柄?值(value)?

如果这不可能,有没有办法在创建两个线程后打开文件句柄并将其传递给另一个线程?

提前感谢您的任何建议。

最佳答案

使用 open :

If you specify '<&=X', where X is a file descriptor number or a filehandle, then Perl will do an equivalent of C's fdopen 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/

相关文章:

linux - 如何快速汇总文件中的所有数字?

java - 如何检查invokelater是否完成

c - 批量处理

java - 程序卡在主java线程中

perl - 为什么 Moose 代码这么慢?

perl - Net::IMAP::Simple 获取不到整个消息

perl - 如何使用 Perl 打开 Unicode 文件?

multithreading - QProgressBar 不显示进度?

c# - System.Threading.Timer 的奇怪行为

Perl:将序列化哈希通过管道传递给 fork 进程