ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Linux-AIO/AIO.pm
Revision: 1.6
Committed: Thu Aug 30 03:12:54 2001 UTC (22 years, 8 months ago) by root
Branch: MAIN
Changes since 1.5: +2 -0 lines
Log Message:
*** empty log message ***

File Contents

# Content
1 =head1 NAME
2
3 Linux::AIO - linux-specific aio implemented using clone
4
5 =head1 SYNOPSIS
6
7 use Linux::AIO;
8
9 =head1 DESCRIPTION
10
11 This module implements asynchroneous i/o using the means available to
12 linux - clone. It does not hook into the POSIX aio_* functions because
13 linux does not yet support these in the kernel. Instead, a number of
14 threads are started that execute your read/writes and signal their
15 completion.
16
17 =over 4
18
19 =cut
20
21 package Linux::AIO;
22
23 use base 'Exporter';
24
25 BEGIN {
26 $VERSION = 0.002;
27
28 @EXPORT = qw(aio_read aio_write aio_open aio_close);
29 @EXPORT_OK = qw(poll_fileno poll_cb min_parallel max_parallel nreqs);
30
31 require XSLoader;
32 XSLoader::load Linux::AIO, $VERSION;
33 }
34
35 =item Linux::AIO::min_parallel($nthreads)
36
37 Set the minimum number of AIO threads to $nthreads. You I<have> to call
38 this function with a positive number at leats once, otherwise no threads
39 will be started and you aio-operations will seem to hang.
40
41 =item $fileno = Linux::AIO::poll_fileno
42
43 Return the request result pipe filehandle. This filehandle must be polled
44 for reading. If the pipe becomes readable you have to call C<poll_cb>.
45
46 =item Linux::AIO::poll_cb
47
48 Process all outstanding events on the result pipe. You have to call this
49 regularly. Returns the number of events processed.
50
51 You can use Event to multiplex, e.g.:
52
53 Event->io(fd => Linux::AIO::poll_fileno,
54 poll => 'r', async => 1,
55 cb => \&Linux::AIO::poll_cb );
56
57
58 =item Linux::AIO::nreqs
59
60 Returns the number of requests currently outstanding.
61
62 =item aio_read($fh,$offset,$length, $data,$dataoffset,$callback)
63 aio_write($fh,$offset,$length, $data,$dataoffset,$callback)
64
65 Reads or writes C<length> bytes from the specified C<fh> and C<offset>
66 into the scalar given by C<data> and offset C<dataoffset> and calls the
67 callback without the actual number of bytes read (or undef on error).
68
69 =item aio_open($pathname, $flags, $mode, $callback)
70
71 Asynchronously open or create a file and call the callback with the
72 filedescriptor.
73
74 =item aio_close($fh, $callback)
75
76 Asynchronously close a file and call the callback with the result code.
77
78 =cut
79
80 END {
81 max_parallel 0;
82 }
83
84 1;
85
86 =back
87
88 =head1 BUGS
89
90 This module has not yet been extensively tested. Watch out!
91
92 - aio_stat/lstat are seriously missing here.
93
94 =head1 SEE ALSO
95
96 L<Coro>.
97
98 =head1 AUTHOR
99
100 Marc Lehmann <pcg@goof.com>
101 http://www.goof.com/pcg/marc/
102
103 =cut
104