2017-08-12 48 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提示检查状态码。