File: io_getevents.3

package info (click to toggle)
libaio 0.3.113-9
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,404 kB
  • sloc: ansic: 956; makefile: 150; sh: 45
file content (145 lines) | stat: -rw-r--r-- 3,760 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
.\"/* io_getevents:
.\" *      Attempts to read at least min_nr events and up to nr events from
.\" *      the completion queue for the aio_context specified by ctx.  May
.\" *      fail with -EINVAL if ctx is invalid, if min_nr is out of range,
.\" *      if nr is out of range, if when is out of range.  May fail with
.\" *      -EFAULT if any of the memory specified to is invalid.  May return
.\" *      0 or < min_nr if no events are available and the timeout specified
.\" *      by when has elapsed, where when == NULL specifies an infinite
.\" *      timeout.  Note that the timeout pointed to by when is relative and
.\" *      will be updated if not NULL and the operation blocks.  Will fail
.\" *      with -ENOSYS if not implemented.
.\" */
.\"asmlinkage long sys_io_getevents(io_context_t ctx,
.\"                                 long min_nr,
.\"                                 long nr,
.\"                                 struct io_event *events,
.\"                                 struct timespec *timeout)
.\"
.TH io_getevents 3 2019-07-23 "Linux" "Linux AIO"
.SH NAME
io_getevents, aio_pgetevents \- Read resulting events from io requests
.SH SYNOPSIS
.nf
.B #include <errno.h>
.sp
.br
.B #include <libaio.h>
.br
.sp
struct iocb {
	void		*data;
	unsigned	key;
	short		aio_lio_opcode;
	short		aio_reqprio;
	int		aio_fildes;
};
.sp
struct io_event {
        unsigned        PADDED(data, __pad1);
        unsigned        PADDED(obj,  __pad2);
        unsigned        PADDED(res,  __pad3);
        unsigned        PADDED(res2, __pad4);
};
.sp
.BI "int io_getevents(io_context_t " ctx ", long " nr ", struct io_event *" events "[], struct timespec *" timeout ");"
.BI "int io_pgetevents(io_context_t " ctx ", long " nr ", struct io_event *" events "[], struct timespec *" timeout ", sigset_t *" sigmask ");"
.fi
.SH DESCRIPTION
Attempts to read up to
.I nr
events from the completion queue for the aio_context specified by
.IR ctx .
.SH "RETURN VALUES"
May return
.B 0
if no events are available and the timeout specified
by when has elapsed, where
.I when
== NULL specifies an infinite
timeout.  Note that the timeout pointed to by when is relative and
will be updated if not NULL and the operation blocks.  Will fail with
.B ENOSYS
if not implemented.
.SS io_pgetevents()
The relationship between
.BR io_getevents ()
and
.BR io_pgetevents ()
is analogous to the relationship between
.BR select (2)
and
.BR pselect (2):
similar to
.BR pselect (2),
.BR pgetevents ()
allows an application to safely wait until either an aio completion
event happens or until a signal is caught.
.PP
The following
.BR io_pgetevents ()
call:
.PP
.in +4n
.EX
ret = io_pgetevents(ctx, min_nr, nr, events, timeout, sigmask);
.EE
.in
.PP
is equivalent to
.I atomically
executing the following calls:
.PP
.in +4n
.EX
sigset_t origmask;

pthread_sigmask(SIG_SETMASK, &sigmask, &origmask);
ret = io_getevents(ctx, min_nr, nr, events, timeout);
pthread_sigmask(SIG_SETMASK, &origmask, NULL);
.EE
.in
.PP
See the description of
.BR pselect (2)
for an explanation of why
.BR io_pgetevents ()
is necessary.
.PP
If the
.I sigmask
argument is specified as NULL, then no signal mask manipulation is
performed (and thus
.BR io_pgetevents ()
behaves the same as
.BR io_getevents() ).
.SH ERRORS
.TP
.B EINVAL 
If
.I ctx
is invalid, if
.I min_nr
is out of range, if
.I nr
is out of range, if
.I when
is out of range.
.TP
.B EFAULT 
If any of the memory specified to is invalid.
.SH "SEE ALSO"
.BR io (3),
.BR io_cancel (3),
.BR io_fsync (3),
.BR io_prep_fsync (3),
.BR io_prep_pread (3),
.BR io_prep_pwrite (3),
.BR io_queue_init (3),
.BR io_queue_release (3),
.BR io_queue_run (3),
.BR io_queue_wait (3),
.BR io_set_callback (3),
.BR io_submit (3),
.BR errno (3),
.BR pselect (2).