2017-08-12 79 views
0

嘗試使用perl的MMAP,但是從文檔頁面(Perl mmap)的例子給了錯誤:的Perl腳本MMAP了錯誤,因爲 「無效參數」

$ perl mmap.pl tmp.bin 
mmap: mmap call failed: errno: 22 errmsg: Invalid argument at mmap.pl line 5. 

爲mmap.pl

代碼
use Sys::Mmap; 

open FILEHANDLE, "+<", $ARGV[0] || die "Failed to open $ARGV[0] $!\n"; 

mmap($foo, 0, PROT_READ, MAP_SHARED, FILEHANDLE) or die "mmap: $!"; 
@tags = $foo =~ /<(.*?)>/g; 
munmap($foo) or die "munmap: $!"; 

mmap($bar, 8192, PROT_READ|PROT_WRITE, MAP_SHARED, FILEHANDLE); 
substr($bar, 1024, 11) = "Hello world"; 

不知道如何解決它。

+1

您應該查看您的操作系統文檔以查找「mmap(2)」系統調用。請注意可能會失敗並將errno設置爲EINVAL的原因。如果您仍然需要幫助,您應該編輯您的問題,告訴我們您正在運行的操作系統,並且包含系統mmap文檔的相關部分。 – Kenster

+0

什麼是$ foo?你應該把'嚴格使用;使用警告;'來捕捉語法錯誤。在我看來,無效的參數可能會引用$ foo爲空,而這對mmap來說是意外的/不允許的。 – bytepusher

+1

'嚴格使用;使用警告;'也會在常量名稱中捕獲拼寫錯誤。始終使用'use strict;使用警告;'!!! – ikegami

回答

2

原來的文件tmp.bin由於參數有0個字節,我傳入了。

我傳遞了一個非空文件作爲參數,它工作正常。

感謝@kenster提示檢查狀態碼。