Cache-Mmap
view release on metacpan or search on metacpan
addr=mmap(0,len,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);
if(addr==MAP_FAILED){
RETVAL=0;
}else{
SvUPGRADE(var,SVt_PV);
SvPVX(var)=(char*)addr;
SvCUR_set(var,len);
SvLEN_set(var,0);
SvPOK_only(var);
RETVAL=1;
}
OUTPUT:
RETVAL
int
munmap(var)
SV *var
PROTOTYPE: $
CODE:
if(munmap((MMAP_RETTYPE)SvPVX(var),SvCUR(var))<0){
RETVAL=0;
}else{
SvREADONLY_off(var);
SvPVX(var)=0;
SvCUR_set(var,0);
SvLEN_set(var,0);
SvOK_off(var);
RETVAL=1;
}
OUTPUT:
RETVAL
int
_lock_xs(fh,off,len,mode)
FILE *fh
off_t off
size_t len
int mode
int fd = NO_INIT
struct flock fl = NO_INIT
PROTOTYPE: $$$$
CODE:
/* XXX Use new perlio stuff to get fd */
fd=fileno(fh);
fl.l_whence=SEEK_SET;
fl.l_start=off;
fl.l_len=len;
fl.l_type=mode ? F_WRLCK : F_UNLCK;
RETVAL=fcntl(fd,F_SETLKW,&fl)>=0;
/* Define our own utf8::decode(), if we're on perl 5.6 */
MODULE = Cache::Mmap PACKAGE = utf8
#if (PERL_VERSION == 6)
void
decode(SV *str)
PROTOTYPE: $
PPCODE:
SV *sv=ST(0);
int RETVAL;
RETVAL=sv_utf8_decode(sv);
ST(0)=boolSV(RETVAL);
sv_2mortal(ST(0));
XSRETURN(1);
#endif
( run in 1.045 second using v1.01-cache-2.11-cpan-71847e10f99 )