Current Dir: /usr/include/

[DIR]  arpa [ delete | rename ]
[DIR]  asm [ delete | rename ]
[DIR]  asm-generic [ delete | rename ]
[DIR]  bind9 [ delete | rename ]
[DIR]  bits [ delete | rename ]
[DIR]  blkid [ delete | rename ]
[DIR]  brotli [ delete | rename ]
[DIR]  bsock [ delete | rename ]
[DIR]  c++ [ delete | rename ]
[DIR]  criu-lve [ delete | rename ]
[DIR]  drm [ delete | rename ]
[DIR]  e2p [ delete | rename ]
[DIR]  et [ delete | rename ]
[DIR]  event2 [ delete | rename ]
[DIR]  ext2fs [ delete | rename ]
[DIR]  finclude [ delete | rename ]
[DIR]  fontconfig [ delete | rename ]
[DIR]  freetype2 [ delete | rename ]
[DIR]  fstrm [ delete | rename ]
[DIR]  fwctl [ delete | rename ]
[DIR]  gdbm [ delete | rename ]
[DIR]  gio-unix-2.0 [ delete | rename ]
[DIR]  GL [ delete | rename ]
[DIR]  glib-2.0 [ delete | rename ]
[DIR]  gnu [ delete | rename ]
[DIR]  google [ delete | rename ]
[DIR]  graphite2 [ delete | rename ]
[DIR]  gssapi [ delete | rename ]
[DIR]  gssrpc [ delete | rename ]
[DIR]  harfbuzz [ delete | rename ]
[DIR]  json-c [ delete | rename ]
[DIR]  kadm5 [ delete | rename ]
[DIR]  krb5 [ delete | rename ]
[DIR]  libexslt [ delete | rename ]
[DIR]  libltdl [ delete | rename ]
[DIR]  libmount [ delete | rename ]
[DIR]  libpng16 [ delete | rename ]
[DIR]  libxml2 [ delete | rename ]
[DIR]  libxslt [ delete | rename ]
[DIR]  linux [ delete | rename ]
[DIR]  lve [ delete | rename ]
[DIR]  lzma [ delete | rename ]
[DIR]  misc [ delete | rename ]
[DIR]  mtd [ delete | rename ]
[DIR]  mysql [ delete | rename ]
[DIR]  ncurses [ delete | rename ]
[DIR]  ncursesw [ delete | rename ]
[DIR]  net [ delete | rename ]
[DIR]  netash [ delete | rename ]
[DIR]  netatalk [ delete | rename ]
[DIR]  netax25 [ delete | rename ]
[DIR]  neteconet [ delete | rename ]
[DIR]  netinet [ delete | rename ]
[DIR]  netipx [ delete | rename ]
[DIR]  netiucv [ delete | rename ]
[DIR]  netpacket [ delete | rename ]
[DIR]  netrom [ delete | rename ]
[DIR]  netrose [ delete | rename ]
[DIR]  nfs [ delete | rename ]
[DIR]  openssl [ delete | rename ]
[DIR]  pcp [ delete | rename ]
[DIR]  protobuf-c [ delete | rename ]
[DIR]  protocols [ delete | rename ]
[DIR]  python3.9 [ delete | rename ]
[DIR]  rdma [ delete | rename ]
[DIR]  rpc [ delete | rename ]
[DIR]  rpcsvc [ delete | rename ]
[DIR]  scsi [ delete | rename ]
[DIR]  security [ delete | rename ]
[DIR]  selinux [ delete | rename ]
[DIR]  sepol [ delete | rename ]
[DIR]  sound [ delete | rename ]
[DIR]  sys [ delete | rename ]
[DIR]  sysprof-4 [ delete | rename ]
[DIR]  tirpc [ delete | rename ]
[DIR]  unicode [ delete | rename ]
[DIR]  video [ delete | rename ]
[DIR]  webp [ delete | rename ]
[DIR]  X11 [ delete | rename ]
[DIR]  xcb [ delete | rename ]
[DIR]  xen [ delete | rename ]
[FILE] a.out.h [ edit | delete | rename ]
[FILE] aio.h [ edit | delete | rename ]
[FILE] aliases.h [ edit | delete | rename ]
[FILE] alloca.h [ edit | delete | rename ]
[FILE] ar.h [ edit | delete | rename ]
[FILE] argp.h [ edit | delete | rename ]
[FILE] argz.h [ edit | delete | rename ]
[FILE] assert.h [ edit | delete | rename ]
[FILE] autosprintf.h [ edit | delete | rename ]
[FILE] byteswap.h [ edit | delete | rename ]
[FILE] bzlib.h [ edit | delete | rename ]
[FILE] complex.h [ edit | delete | rename ]
[FILE] com_err.h [ edit | delete | rename ]
[FILE] cpio.h [ edit | delete | rename ]
[FILE] cpuidle.h [ edit | delete | rename ]
[FILE] crypt.h [ edit | delete | rename ]
[FILE] ctype.h [ edit | delete | rename ]
[FILE] curses.h [ edit | delete | rename ]
[FILE] cursesapp.h [ edit | delete | rename ]
[FILE] cursesf.h [ edit | delete | rename ]
[FILE] cursesm.h [ edit | delete | rename ]
[FILE] cursesp.h [ edit | delete | rename ]
[FILE] cursesw.h [ edit | delete | rename ]
[FILE] cursslk.h [ edit | delete | rename ]
[FILE] dbm.h [ edit | delete | rename ]
[FILE] dirent.h [ edit | delete | rename ]
[FILE] dlfcn.h [ edit | delete | rename ]
[FILE] elf.h [ edit | delete | rename ]
[FILE] endian.h [ edit | delete | rename ]
[FILE] entities.h [ edit | delete | rename ]
[FILE] envz.h [ edit | delete | rename ]
[FILE] err.h [ edit | delete | rename ]
[FILE] errno.h [ edit | delete | rename ]
[FILE] error.h [ edit | delete | rename ]
[FILE] eti.h [ edit | delete | rename ]
[FILE] etip.h [ edit | delete | rename ]
[FILE] evdns.h [ edit | delete | rename ]
[FILE] event.h [ edit | delete | rename ]
[FILE] evhttp.h [ edit | delete | rename ]
[FILE] evrpc.h [ edit | delete | rename ]
[FILE] evutil.h [ edit | delete | rename ]
[FILE] execinfo.h [ edit | delete | rename ]
[FILE] expat.h [ edit | delete | rename ]
[FILE] expat_config.h [ edit | delete | rename ]
[FILE] expat_external.h [ edit | delete | rename ]
[FILE] fcntl.h [ edit | delete | rename ]
[FILE] features-time64.h [ edit | delete | rename ]
[FILE] features.h [ edit | delete | rename ]
[FILE] fenv.h [ edit | delete | rename ]
[FILE] ffi-x86_64.h [ edit | delete | rename ]
[FILE] ffi.h [ edit | delete | rename ]
[FILE] ffitarget-x86_64.h [ edit | delete | rename ]
[FILE] ffitarget.h [ edit | delete | rename ]
[FILE] FlexLexer.h [ edit | delete | rename ]
[FILE] fmtmsg.h [ edit | delete | rename ]
[FILE] fnmatch.h [ edit | delete | rename ]
[FILE] form.h [ edit | delete | rename ]
[FILE] fpu_control.h [ edit | delete | rename ]
[FILE] fstab.h [ edit | delete | rename ]
[FILE] fstrm.h [ edit | delete | rename ]
[FILE] fts.h [ edit | delete | rename ]
[FILE] ftw.h [ edit | delete | rename ]
[FILE] gconv.h [ edit | delete | rename ]
[FILE] gd.h [ edit | delete | rename ]
[FILE] gdbm.h [ edit | delete | rename ]
[FILE] gdcache.h [ edit | delete | rename ]
[FILE] gdfontg.h [ edit | delete | rename ]
[FILE] gdfontl.h [ edit | delete | rename ]
[FILE] gdfontmb.h [ edit | delete | rename ]
[FILE] gdfonts.h [ edit | delete | rename ]
[FILE] gdfontt.h [ edit | delete | rename ]
[FILE] gdfx.h [ edit | delete | rename ]
[FILE] gdpp.h [ edit | delete | rename ]
[FILE] gd_color_map.h [ edit | delete | rename ]
[FILE] gd_errors.h [ edit | delete | rename ]
[FILE] gd_io.h [ edit | delete | rename ]
[FILE] gelf.h [ edit | delete | rename ]
[FILE] getopt.h [ edit | delete | rename ]
[FILE] gettext-po.h [ edit | delete | rename ]
[FILE] glob.h [ edit | delete | rename ]
[FILE] gnu-versions.h [ edit | delete | rename ]
[FILE] gnumake.h [ edit | delete | rename ]
[FILE] gpg-error.h [ edit | delete | rename ]
[FILE] gpgrt.h [ edit | delete | rename ]
[FILE] grp.h [ edit | delete | rename ]
[FILE] gshadow.h [ edit | delete | rename ]
[FILE] gssapi.h [ edit | delete | rename ]
[FILE] iconv.h [ edit | delete | rename ]
[FILE] idn-free.h [ edit | delete | rename ]
[FILE] idn-int.h [ edit | delete | rename ]
[FILE] idna.h [ edit | delete | rename ]
[FILE] ieee754.h [ edit | delete | rename ]
[FILE] ifaddrs.h [ edit | delete | rename ]
[FILE] inttypes.h [ edit | delete | rename ]
[FILE] jconfig-64.h [ edit | delete | rename ]
[FILE] jconfig.h [ edit | delete | rename ]
[FILE] jerror.h [ edit | delete | rename ]
[FILE] jmorecfg.h [ edit | delete | rename ]
[FILE] jpegint.h [ edit | delete | rename ]
[FILE] jpeglib.h [ edit | delete | rename ]
[FILE] kdb.h [ edit | delete | rename ]
[FILE] keyutils.h [ edit | delete | rename ]
[FILE] krad.h [ edit | delete | rename ]
[FILE] krb5.h [ edit | delete | rename ]
[FILE] langinfo.h [ edit | delete | rename ]
[FILE] lastlog.h [ edit | delete | rename ]
[FILE] libaio.h [ edit | delete | rename ]
[FILE] libelf.h [ edit | delete | rename ]
[FILE] libgen.h [ edit | delete | rename ]
[FILE] libintl.h [ edit | delete | rename ]
[FILE] libtasn1.h [ edit | delete | rename ]
[FILE] limits.h [ edit | delete | rename ]
[FILE] link.h [ edit | delete | rename ]
[FILE] lmdb.h [ edit | delete | rename ]
[FILE] locale.h [ edit | delete | rename ]
[FILE] ltdl.h [ edit | delete | rename ]
[FILE] lzma.h [ edit | delete | rename ]
[FILE] malloc.h [ edit | delete | rename ]
[FILE] math.h [ edit | delete | rename ]
[FILE] maxminddb.h [ edit | delete | rename ]
[FILE] maxminddb_config-64.h [ edit | delete | rename ]
[FILE] maxminddb_config.h [ edit | delete | rename ]
[FILE] mcheck.h [ edit | delete | rename ]
[FILE] memory.h [ edit | delete | rename ]
[FILE] menu.h [ edit | delete | rename ]
[FILE] mntent.h [ edit | delete | rename ]
[FILE] monetary.h [ edit | delete | rename ]
[FILE] mqueue.h [ edit | delete | rename ]
[FILE] ncurses.h [ edit | delete | rename ]
[FILE] ncurses_dll.h [ edit | delete | rename ]
[FILE] nc_tparm.h [ edit | delete | rename ]
[FILE] ndbm.h [ edit | delete | rename ]
[FILE] netdb.h [ edit | delete | rename ]
[FILE] nlist.h [ edit | delete | rename ]
[FILE] nl_types.h [ edit | delete | rename ]
[FILE] nss.h [ edit | delete | rename ]
[FILE] obstack.h [ edit | delete | rename ]
[FILE] panel.h [ edit | delete | rename ]
[FILE] paths.h [ edit | delete | rename ]
[FILE] pcre.h [ edit | delete | rename ]
[FILE] pcre2.h [ edit | delete | rename ]
[FILE] pcre2posix.h [ edit | delete | rename ]
[FILE] pcrecpp.h [ edit | delete | rename ]
[FILE] pcrecpparg.h [ edit | delete | rename ]
[FILE] pcreposix.h [ edit | delete | rename ]
[FILE] pcre_scanner.h [ edit | delete | rename ]
[FILE] pcre_stringpiece.h [ edit | delete | rename ]
[FILE] png.h [ edit | delete | rename ]
[FILE] pngconf.h [ edit | delete | rename ]
[FILE] pnglibconf.h [ edit | delete | rename ]
[FILE] poll.h [ edit | delete | rename ]
[FILE] powercap.h [ edit | delete | rename ]
[FILE] pr29.h [ edit | delete | rename ]
[FILE] printf.h [ edit | delete | rename ]
[FILE] proc_service.h [ edit | delete | rename ]
[FILE] profile.h [ edit | delete | rename ]
[FILE] pthread.h [ edit | delete | rename ]
[FILE] pty.h [ edit | delete | rename ]
[FILE] punycode.h [ edit | delete | rename ]
[FILE] pwd.h [ edit | delete | rename ]
[FILE] regex.h [ edit | delete | rename ]
[FILE] regexp.h [ edit | delete | rename ]
[FILE] resolv.h [ edit | delete | rename ]
[FILE] re_comp.h [ edit | delete | rename ]
[FILE] sched.h [ edit | delete | rename ]
[FILE] search.h [ edit | delete | rename ]
[FILE] semaphore.h [ edit | delete | rename ]
[FILE] setjmp.h [ edit | delete | rename ]
[FILE] sgtty.h [ edit | delete | rename ]
[FILE] shadow.h [ edit | delete | rename ]
[FILE] signal.h [ edit | delete | rename ]
[FILE] spawn.h [ edit | delete | rename ]
[FILE] stab.h [ edit | delete | rename ]
[FILE] stdc-predef.h [ edit | delete | rename ]
[FILE] stdint.h [ edit | delete | rename ]
[FILE] stdio.h [ edit | delete | rename ]
[FILE] stdio_ext.h [ edit | delete | rename ]
[FILE] stdlib.h [ edit | delete | rename ]
[FILE] string.h [ edit | delete | rename ]
[FILE] stringprep.h [ edit | delete | rename ]
[FILE] strings.h [ edit | delete | rename ]
[FILE] syscall.h [ edit | delete | rename ]
[FILE] sysexits.h [ edit | delete | rename ]
[FILE] syslog.h [ edit | delete | rename ]
[FILE] tar.h [ edit | delete | rename ]
[FILE] term.h [ edit | delete | rename ]
[FILE] termcap.h [ edit | delete | rename ]
[FILE] termio.h [ edit | delete | rename ]
[FILE] termios.h [ edit | delete | rename ]
[FILE] term_entry.h [ edit | delete | rename ]
[FILE] tgmath.h [ edit | delete | rename ]
[FILE] threads.h [ edit | delete | rename ]
[FILE] thread_db.h [ edit | delete | rename ]
[FILE] tic.h [ edit | delete | rename ]
[FILE] tiff.h [ edit | delete | rename ]
[FILE] tiffconf-64.h [ edit | delete | rename ]
[FILE] tiffconf.h [ edit | delete | rename ]
[FILE] tiffio.h [ edit | delete | rename ]
[FILE] tiffio.hxx [ edit | delete | rename ]
[FILE] tiffvers.h [ edit | delete | rename ]
[FILE] time.h [ edit | delete | rename ]
[FILE] tld.h [ edit | delete | rename ]
[FILE] ttyent.h [ edit | delete | rename ]
[FILE] uchar.h [ edit | delete | rename ]
[FILE] ucontext.h [ edit | delete | rename ]
[FILE] ulimit.h [ edit | delete | rename ]
[FILE] unctrl.h [ edit | delete | rename ]
[FILE] unistd.h [ edit | delete | rename ]
[FILE] utime.h [ edit | delete | rename ]
[FILE] utmp.h [ edit | delete | rename ]
[FILE] utmpx.h [ edit | delete | rename ]
[FILE] values.h [ edit | delete | rename ]
[FILE] verto-module.h [ edit | delete | rename ]
[FILE] verto.h [ edit | delete | rename ]
[FILE] wait.h [ edit | delete | rename ]
[FILE] wchar.h [ edit | delete | rename ]
[FILE] wctype.h [ edit | delete | rename ]
[FILE] wordexp.h [ edit | delete | rename ]
[FILE] zconf.h [ edit | delete | rename ]
[FILE] zdict.h [ edit | delete | rename ]
[FILE] zlib.h [ edit | delete | rename ]
[FILE] zstd.h [ edit | delete | rename ]
[FILE] zstd_errors.h [ edit | delete | rename ]

Viewing: /usr/include/libaio.h

/* /usr/include/libaio.h
 *
 * Copyright 2000,2001,2002 Red Hat, Inc.
 *
 * Written by Benjamin LaHaise <bcrl@redhat.com>
 *
 * libaio Linux async I/O interface
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA
 */
#ifndef __LIBAIO_H
#define __LIBAIO_H

#ifdef __cplusplus
extern "C" {
#endif

#include <sys/types.h>
#include <string.h>

struct timespec;
struct sockaddr;
struct iovec;

typedef struct io_context *io_context_t;

typedef enum io_iocb_cmd {
	IO_CMD_PREAD = 0,
	IO_CMD_PWRITE = 1,

	IO_CMD_FSYNC = 2,
	IO_CMD_FDSYNC = 3,

	IO_CMD_POLL = 5, /* Never implemented in mainline, see io_prep_poll */
	IO_CMD_NOOP = 6,
	IO_CMD_PREADV = 7,
	IO_CMD_PWRITEV = 8,
} io_iocb_cmd_t;

/* little endian, 32 bits */
#if defined(__i386__) || (defined(__arm__) && !defined(__ARMEB__)) || \
    defined(__sh__) || defined(__bfin__) || defined(__MIPSEL__) || \
    defined(__cris__) || (defined(__riscv) && __riscv_xlen == 32) || \
    (defined(__GNUC__) && defined(__BYTE_ORDER__) && \
         __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ && __SIZEOF_LONG__ == 4)
#define PADDED(x, y)	x; unsigned y
#define PADDEDptr(x, y)	x; unsigned y
#define PADDEDul(x, y)	unsigned long x; unsigned y

/* little endian, 64 bits */
#elif defined(__ia64__) || defined(__x86_64__) || defined(__alpha__) || \
      (defined(__aarch64__) && defined(__AARCH64EL__)) || \
      (defined(__riscv) && __riscv_xlen == 64) || \
      (defined(__GNUC__) && defined(__BYTE_ORDER__) && \
          __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ && __SIZEOF_LONG__ == 8)
#define PADDED(x, y)	x, y
#define PADDEDptr(x, y)	x
#define PADDEDul(x, y)	unsigned long x

/* big endian, 64 bits */
#elif defined(__powerpc64__) || defined(__s390x__) || \
      (defined(__sparc__) && defined(__arch64__)) || \
      (defined(__aarch64__) && defined(__AARCH64EB__)) || \
      (defined(__GNUC__) && defined(__BYTE_ORDER__) && \
           __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ && __SIZEOF_LONG__ == 8)
#define PADDED(x, y)	unsigned y; x
#define PADDEDptr(x,y)	x
#define PADDEDul(x, y)	unsigned long x

/* big endian, 32 bits */
#elif defined(__PPC__) || defined(__s390__) || \
      (defined(__arm__) && defined(__ARMEB__)) || \
      defined(__sparc__) || defined(__MIPSEB__) || defined(__m68k__) || \
      defined(__hppa__) || defined(__frv__) || defined(__avr32__) || \
      (defined(__GNUC__) && defined(__BYTE_ORDER__) && \
           __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ && __SIZEOF_LONG__ == 4)
#define PADDED(x, y)	unsigned y; x
#define PADDEDptr(x, y)	unsigned y; x
#define PADDEDul(x, y)	unsigned y; unsigned long x

#else
#error	endian?
#endif

struct io_iocb_poll {
	PADDED(int events, __pad1);
};	/* result code is the set of result flags or -'ve errno */

struct io_iocb_sockaddr {
	struct sockaddr *addr;
	int		len;
};	/* result code is the length of the sockaddr, or -'ve errno */

struct io_iocb_common {
	PADDEDptr(void	*buf, __pad1);
	PADDEDul(nbytes, __pad2);
	long long	offset;
	long long	__pad3;
	unsigned	flags;
	unsigned	resfd;
};	/* result code is the amount read or -'ve errno */

struct io_iocb_vector {
	const struct iovec	*vec;
	int			nr;
	long long		offset;
};	/* result code is the amount read or -'ve errno */

struct iocb {
	PADDEDptr(void *data, __pad1);	/* Return in the io completion event */
	/* key: For use in identifying io requests */
	/* aio_rw_flags: RWF_* flags (such as RWF_NOWAIT) */
	PADDED(unsigned key, aio_rw_flags);

	short		aio_lio_opcode;	
	short		aio_reqprio;
	int		aio_fildes;

	union {
		struct io_iocb_common		c;
		struct io_iocb_vector		v;
		struct io_iocb_poll		poll;
		struct io_iocb_sockaddr	saddr;
	} u;
};

struct io_event {
	PADDEDptr(void *data, __pad1);
	PADDEDptr(struct iocb *obj,  __pad2);
	PADDEDul(res,  __pad3);
	PADDEDul(res2, __pad4);
};

#undef PADDED
#undef PADDEDptr
#undef PADDEDul

typedef void (*io_callback_t)(io_context_t ctx, struct iocb *iocb, long res, long res2);

/* library wrappers */
extern int io_queue_init(int maxevents, io_context_t *ctxp);
/*extern int io_queue_grow(io_context_t ctx, int new_maxevents);*/
extern int io_queue_release(io_context_t ctx);
/*extern int io_queue_wait(io_context_t ctx, struct timespec *timeout);*/
extern int io_queue_run(io_context_t ctx);

/* Actual syscalls */
extern int io_setup(int maxevents, io_context_t *ctxp);
extern int io_destroy(io_context_t ctx);
extern int io_submit(io_context_t ctx, long nr, struct iocb *ios[]);
extern int io_cancel(io_context_t ctx, struct iocb *iocb, struct io_event *evt);
extern int io_getevents(io_context_t ctx_id, long min_nr, long nr, struct io_event *events, struct timespec *timeout);


static inline void io_set_callback(struct iocb *iocb, io_callback_t cb)
{
	iocb->data = (void *)cb;
}

static inline void io_prep_pread(struct iocb *iocb, int fd, void *buf, size_t count, long long offset)
{
	memset(iocb, 0, sizeof(*iocb));
	iocb->aio_fildes = fd;
	iocb->aio_lio_opcode = IO_CMD_PREAD;
	iocb->aio_reqprio = 0;
	iocb->u.c.buf = buf;
	iocb->u.c.nbytes = count;
	iocb->u.c.offset = offset;
}

static inline void io_prep_pwrite(struct iocb *iocb, int fd, void *buf, size_t count, long long offset)
{
	memset(iocb, 0, sizeof(*iocb));
	iocb->aio_fildes = fd;
	iocb->aio_lio_opcode = IO_CMD_PWRITE;
	iocb->aio_reqprio = 0;
	iocb->u.c.buf = buf;
	iocb->u.c.nbytes = count;
	iocb->u.c.offset = offset;
}

static inline void io_prep_preadv(struct iocb *iocb, int fd, const struct iovec *iov, int iovcnt, long long offset)
{
	memset(iocb, 0, sizeof(*iocb));
	iocb->aio_fildes = fd;
	iocb->aio_lio_opcode = IO_CMD_PREADV;
	iocb->aio_reqprio = 0;
	iocb->u.c.buf = (void *)iov;
	iocb->u.c.nbytes = iovcnt;
	iocb->u.c.offset = offset;
}

static inline void io_prep_pwritev(struct iocb *iocb, int fd, const struct iovec *iov, int iovcnt, long long offset)
{
	memset(iocb, 0, sizeof(*iocb));
	iocb->aio_fildes = fd;
	iocb->aio_lio_opcode = IO_CMD_PWRITEV;
	iocb->aio_reqprio = 0;
	iocb->u.c.buf = (void *)iov;
	iocb->u.c.nbytes = iovcnt;
	iocb->u.c.offset = offset;
}

static inline void io_prep_preadv2(struct iocb *iocb, int fd, const struct iovec *iov, int iovcnt, long long offset, int flags)
{
	memset(iocb, 0, sizeof(*iocb));
	iocb->aio_fildes = fd;
	iocb->aio_lio_opcode = IO_CMD_PREADV;
	iocb->aio_reqprio = 0;
	iocb->aio_rw_flags = flags;
	iocb->u.c.buf = (void *)iov;
	iocb->u.c.nbytes = iovcnt;
	iocb->u.c.offset = offset;
}

static inline void io_prep_pwritev2(struct iocb *iocb, int fd, const struct iovec *iov, int iovcnt, long long offset, int flags)
{
	memset(iocb, 0, sizeof(*iocb));
	iocb->aio_fildes = fd;
	iocb->aio_lio_opcode = IO_CMD_PWRITEV;
	iocb->aio_reqprio = 0;
	iocb->aio_rw_flags = flags;
	iocb->u.c.buf = (void *)iov;
	iocb->u.c.nbytes = iovcnt;
	iocb->u.c.offset = offset;
}

/* Jeff Moyer says this was implemented in Red Hat AS2.1 and RHEL3.
 * AFAICT, it was never in mainline, and should not be used. --RR */
static inline void io_prep_poll(struct iocb *iocb, int fd, int events)
{
        memset(iocb, 0, sizeof(*iocb));
        iocb->aio_fildes = fd;
        iocb->aio_lio_opcode = IO_CMD_POLL;
        iocb->aio_reqprio = 0;
        iocb->u.poll.events = events;
}

static inline int io_poll(io_context_t ctx, struct iocb *iocb, io_callback_t cb, int fd, int events)
{
        io_prep_poll(iocb, fd, events);
        io_set_callback(iocb, cb);
        return io_submit(ctx, 1, &iocb);
}

static inline void io_prep_fsync(struct iocb *iocb, int fd)
{
	memset(iocb, 0, sizeof(*iocb));
	iocb->aio_fildes = fd;
	iocb->aio_lio_opcode = IO_CMD_FSYNC;
	iocb->aio_reqprio = 0;
}

static inline int io_fsync(io_context_t ctx, struct iocb *iocb, io_callback_t cb, int fd)
{
	io_prep_fsync(iocb, fd);
	io_set_callback(iocb, cb);
	return io_submit(ctx, 1, &iocb);
}

static inline void io_prep_fdsync(struct iocb *iocb, int fd)
{
	memset(iocb, 0, sizeof(*iocb));
	iocb->aio_fildes = fd;
	iocb->aio_lio_opcode = IO_CMD_FDSYNC;
	iocb->aio_reqprio = 0;
}

static inline int io_fdsync(io_context_t ctx, struct iocb *iocb, io_callback_t cb, int fd)
{
	io_prep_fdsync(iocb, fd);
	io_set_callback(iocb, cb);
	return io_submit(ctx, 1, &iocb);
}

static inline void io_set_eventfd(struct iocb *iocb, int eventfd)
{
	iocb->u.c.flags |= (1 << 0) /* IOCB_FLAG_RESFD */;
	iocb->u.c.resfd = eventfd;
}

#ifdef __cplusplus
}
#endif

#endif /* __LIBAIO_H */

Upload File: