VirtualBox

source: vbox/trunk/include/iprt/aiomgr.h@ 68113

Last change on this file since 68113 was 62473, checked in by vboxsync, 8 years ago

(C) 2016

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 5.6 KB
Line 
1/** @file
2 * IPRT - Async I/O manager.
3 */
4
5/*
6 * Copyright (C) 2013-2016 Oracle Corporation
7 *
8 * This file is part of VirtualBox Open Source Edition (OSE), as
9 * available from http://www.virtualbox.org. This file is free software;
10 * you can redistribute it and/or modify it under the terms of the GNU
11 * General Public License (GPL) as published by the Free Software
12 * Foundation, in version 2 as it comes in the "COPYING" file of the
13 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
14 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
15 *
16 * The contents of this file may alternatively be used under the terms
17 * of the Common Development and Distribution License Version 1.0
18 * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
19 * VirtualBox OSE distribution, in which case the provisions of the
20 * CDDL are applicable instead of those of the GPL.
21 *
22 * You may elect to license modified versions of this file under the
23 * terms and conditions of either the GPL or the CDDL or both.
24 */
25
26#ifndef ___iprt_aiomgr_h
27#define ___iprt_aiomgr_h
28
29#include <iprt/cdefs.h>
30#include <iprt/types.h>
31#include <iprt/sg.h>
32
33
34RT_C_DECLS_BEGIN
35
36/** @defgroup grp_rt_aiomgr RTAioMgr - Async I/O Manager.
37 * @ingroup grp_rt
38 * @{
39 */
40
41/**
42 * Completion callback.
43 *
44 * @returns nothing.
45 * @param hAioMgrFile File handle the completed request was for.
46 * @param rcReq Status code of the completed request.
47 * @param pvUser Opaque user data given when the request was initiated.
48 */
49typedef DECLCALLBACK(void) FNRTAIOMGRREQCOMPLETE(RTAIOMGRFILE hAioMgrFile, int rcReq, void *pvUser);
50/** Pointer to a completion callback. */
51typedef FNRTAIOMGRREQCOMPLETE *PFNRTAIOMGRREQCOMPLETE;
52
53/**
54 * Create a new async I/O manager.
55 *
56 * @returns IPRT statuse code.
57 * @param phAioMgr Where to store the new async I/O manager handle on success.
58 * @param cReqsMax Maximum number of async I/O requests expected.
59 * Use UINT32_MAX to make it grow dynamically when required.
60 */
61RTDECL(int) RTAioMgrCreate(PRTAIOMGR phAioMgr, uint32_t cReqsMax);
62
63/**
64 * Retain a async I/O manager handle.
65 *
66 * @returns New reference count on success, UINT32_MAX on failure.
67 * @param hAioMgr The async I/O manager to retain.
68 */
69RTDECL(uint32_t) RTAioMgrRetain(RTAIOMGR hAioMgr);
70
71/**
72 * Releases a async I/O manager handle.
73 *
74 * @returns New reference count on success (0 if closed), UINT32_MAX on failure.
75 * @param hAioMgr The async I/O manager to release.
76 */
77RTDECL(uint32_t) RTAioMgrRelease(RTAIOMGR hAioMgr);
78
79/**
80 * Assign a given file handle to the given async I/O manager.
81 *
82 * @returns IPRT status code.
83 * @param hAioMgr Async I/O manager handle.
84 * @param hFile File handle to assign.
85 * @param pfnReqComplete Callback to execute whenever a request for the
86 * file completed.
87 * @param phAioMgrFile Where to store the newly created async I/O manager
88 * handle on success.
89 * @param pvUser Opaque user data for this file handle.
90 *
91 * @note This function increases the reference count of the given async I/O manager
92 * by 1.
93 */
94RTDECL(int) RTAioMgrFileCreate(RTAIOMGR hAioMgr, RTFILE hFile, PFNRTAIOMGRREQCOMPLETE pfnReqComplete,
95 void *pvUser, PRTAIOMGRFILE phAioMgrFile);
96
97/**
98 * Retain a async I/O manager file handle.
99 *
100 * @returns New reference count on success, UINT32_MAX on failure.
101 * @param hAioMgrFile The file handle to retain.
102 */
103RTDECL(uint32_t) RTAioMgrFileRetain(RTAIOMGRFILE hAioMgrFile);
104
105/**
106 * Releases a async I/O manager file handle.
107 *
108 * @returns New reference count on success (0 if closed), UINT32_MAX on failure.
109 * @param hAioMgrFile The file handle to release.
110 */
111RTDECL(uint32_t) RTAioMgrFileRelease(RTAIOMGRFILE hAioMgrFile);
112
113/**
114 * Return opaque user data passed on creation.
115 *
116 * @returns Opaque user data or NULL if the handle is invalid.
117 * @param hAioMgrFile The file handle.
118 */
119RTDECL(void *) RTAioMgrFileGetUser(RTAIOMGRFILE hAioMgrFile);
120
121/**
122 * Initiate a read request from the given file handle.
123 *
124 * @returns IPRT status code.
125 * @param hAioMgrFile The file handle to read from.
126 * @param off Start offset to read from.
127 * @param pSgBuf S/G buffer to read into. The buffer is advanced
128 * by the amount of data to read.
129 * @param cbRead Number of bytes to read.
130 * @param pvUser Opaque user data given in the completion callback.
131 */
132RTDECL(int) RTAioMgrFileRead(RTAIOMGRFILE hAioMgrFile, RTFOFF off,
133 PRTSGBUF pSgBuf, size_t cbRead, void *pvUser);
134
135/**
136 * Initiate a write request to the given file handle.
137 *
138 * @returns IPRT status code.
139 * @param hAioMgrFile The file handle to write to.
140 * @param off Start offset to write to.
141 * @param pSgBuf S/G buffer to read from. The buffer is advanced
142 * by the amount of data to write.
143 * @param cbWrite Number of bytes to write.
144 * @param pvUser Opaque user data given in the completion callback.
145 */
146RTDECL(int) RTAioMgrFileWrite(RTAIOMGRFILE hAioMgrFile, RTFOFF off,
147 PRTSGBUF pSgBuf, size_t cbWrite, void *pvUser);
148
149/**
150 * Initiates a flush request for the given file handle.
151 *
152 * @returns IPRT statuse code.
153 * @param hAioMgrFile The file handle to write to.
154 * @param pvUser Opaque user data given in the completion callback.
155 */
156RTDECL(int) RTAioMgrFileFlush(RTAIOMGRFILE hAioMgrFile, void *pvUser);
157
158/** @} */
159
160RT_C_DECLS_END
161
162#endif
163
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette