Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?
 
PerlMonks  

Re: O_DIRECT & O_ASYNC, Linux & Perl

by sgifford (Prior)
on May 11, 2007 at 03:04 UTC ( [id://614803]=note: print w/replies, xml ) Need Help??


in reply to O_DIRECT & O_ASYNC, Linux & Perl

Sys::Mmap will give you a page-aligned chunk of memory:
#!/usr/bin/perl use strict; use warnings; use Fcntl qw(:DEFAULT O_ASYNC O_DIRECT); use Sys::Mmap; sysopen(my $FH,"./test.dat", O_WRONLY | O_TRUNC | O_CREAT | O_ASYNC | O_DIRECT, 0666) or die "Couldn't open\n"; my $BUFSIZE = 1048576; my $BUFFER; mmap($BUFFER,$BUFSIZE,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANON, STDOUT) or die "Couldn't mmap\n"; for (my $i = 0; $i < 20480; $i++) { my $written = syswrite($FH,$BUFFER,$BUFSIZE); die "System write error: $!\n" unless defined $written; }

Update: use sysopen with the proper flags. Thanks for the correction, jfroebe! Looks like I screwed up the code cleaning it up for posting.

Replies are listed 'Best First'.
Re^2: O_DIRECT & O_ASYNC, Linux & Perl
by jfroebe (Parson) on May 11, 2007 at 03:48 UTC

    Thanks! That works perfectly (code below with the O_DIRECT & O_ASYNC flags)

    #!/usr/bin/perl use strict; use warnings; $|++; use Fcntl qw(:DEFAULT O_ASYNC O_DIRECT); use Sys::Mmap; my $FH; sysopen($FH, "./test.dat", O_WRONLY | O_TRUNC | O_CREAT | O_ASYNC | O_ +DIRECT, 0666); my $BUFSIZE = 1048576; my $BUFFER; mmap($BUFFER, $BUFSIZE, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANON, ST +DOUT) or die "Couldn't mmap\n"; substr($BUFFER, 0, $BUFSIZE) = "0"x$BUFSIZE; for (my $i = 0; $i < 20480; $i++) { my $written = syswrite($FH, $BUFFER, $BUFSIZE); die "System write error: $!\n" unless defined $written; }

    Jason L. Froebe

    Help find a cure for breast cancer! Net proceeds benefit the Susan G. Komen Breast Cancer Foundation and the National Philanthropic Trust. Help by donating - I'm walking 60 miles in 3 days in August 2007. (The day I return from TechWave is the first day of the Walk).

    Blog, Tech Blog

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://614803]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others rifling through the Monastery: (6)
As of 2024-04-19 11:32 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found