2014-12-05 26 views
-1

請先看代碼。seek()想要在perl上進程的4G

use strict; 
use warnings; 
use Win32API::File 0.08 qw(:ALL); 

my $fh = Win32API::File->new("< \\\\.\\e:"); 
binmode $fh; 

my $block_size = 512; 
seek($fh, 8388607 * $block_size, 0); 
read($fh, my $buf, $block_size); 
my $s = 2 * length($buf); 
print unpack("H$s",$buf); 

我想讀取/寫入直接卷的訪問權限。

該代碼正常工作。

seek($fh, 8388608 * $block_size, 0); 

但是,上述代碼不起作用。

在輸出中,0地址的數據。

我認爲4G以上的價值似乎是一個問題。 (溢)

請告訴我們的解決方案PLZ〜

回答

0

我不是太熟悉Perl,但我已經在Windows中的文件播放時遇到了類似的問題。我猜想這個問題試圖尋找過去的2千兆字節,當POSITION參數將環繞爲負數(「傳統」,這些方法的文件位置往往是32位有符號值)。我發現的解決方案並非總是從文件的開頭尋找......逐步執行搜索將允許文件系統指向參數類型的極限。

seek的參數是:

seek (FILEHANDLE, POSITION, WHENCE) 

WHENCE值應該是SEEK_SET從開始尋求,SEEK_CUR從當前位置尋求,並SEEK_ENDEOF(的端部尋求文件,一般意思是POSITION應該是負值)。

你應該能確認這是否是問題通過改變你的代碼(作爲測試)做幾個步驟的尋求,在增量(說)2097152 * $block_size

seek ($fh, 2097152 * $block_size, SEEK_SET); 
seek ($fh, 2097152 * $block_size, SEEK_CUR); // seek from current position 
seek ($fh, 2097152 * $block_size, SEEK_CUR); // seek from current position 
seek ($fh, 2097152 * $block_size, SEEK_CUR); // seek from current position 
read ($fh, my $buf, $block_size);