Starts a file read operation, reading bytes from a file (or pipe). More...
#include <Async.h>
Classes | |
struct | CompletionData |
Completion data for AsyncFileRead. More... | |
struct | Result |
Callback result for AsyncFileRead. More... | |
Public Types | |
using | Task = AsyncTaskOf< AsyncFileRead > |
Public Types inherited from SC::AsyncRequest | |
enum class | Type : uint8_t { LoopTimeout , LoopWakeUp , LoopWork , ProcessExit , SocketAccept , SocketConnect , SocketSend , SocketReceive , SocketClose , FileRead , FileWrite , FileClose , FilePoll } |
Type of async request. More... | |
Public Member Functions | |
SC::Result | start (AsyncEventLoop &eventLoop) |
Starts a file receive operation, that completes when data has been read from file / pipe. More... | |
SC::Result | start (AsyncEventLoop &eventLoop, ThreadPool &threadPool, Task &task) |
Starts a file receive operation on thread pool, that completes when data has been read from file / pipe. More... | |
uint64_t | getOffset () const |
The file/pipe descriptor handle to read data from. More... | |
void | setOffset (uint64_t fileOffset) |
Sets the offset in bytes at which start reading. More... | |
Public Member Functions inherited from SC::AsyncRequest | |
void | setDebugName (const char *newDebugName) |
AsyncEventLoop * | getEventLoop () const |
Get the event loop associated with this AsyncRequest. More... | |
void | cacheInternalEventLoop (AsyncEventLoop &loop) |
Caches the event loop associated with this AsyncRequest. More... | |
AsyncRequest (Type type) | |
Constructs a free async request of given type. More... | |
Result | stop () |
Stops the async operation. More... | |
bool | isFree () const |
Public Attributes | |
Function< void(Result &)> | callback |
Span< char > | buffer |
Callback called when some data has been read from the file into the buffer. More... | |
FileDescriptor::Handle | fileDescriptor |
The writeable span of memory where to data will be written. More... | |
Public Attributes inherited from SC::AsyncRequest | |
AsyncRequest * | next = nullptr |
AsyncRequest * | prev = nullptr |
Friends | |
struct | AsyncEventLoop |
Additional Inherited Members | |
Protected Member Functions inherited from SC::AsyncRequest | |
Result | validateAsync () |
Result | queueSubmission (AsyncEventLoop &eventLoop) |
Result | queueSubmission (AsyncEventLoop &eventLoop, ThreadPool &threadPool, AsyncTask &task) |
Protected Attributes inherited from SC::AsyncRequest | |
AsyncEventLoop * | eventLoop = nullptr |
AsyncTask * | asyncTask = nullptr |
Starts a file read operation, reading bytes from a file (or pipe).
Callback will be called when the data read from the file (or pipe) is available.
Use the start overload with ThreadPool
/ Task
parameters to execute file read on a background thread. This is important on APIs with blocking behaviour on buffered file I/O (all apis with the exception of io_uring
).
File library can be used to open the file and obtain a file (or pipe) descriptor handle.
O_DIRECT
or Windows FILE_FLAG_WRITE_THROUGH
& FILE_FLAG_NO_BUFFERING
should instead avoid using the Task
parameter for best performance.When not using the Task
remember to:
false
)Additional notes:
|
inline |
The file/pipe descriptor handle to read data from.
Use SC::FileDescriptor or SC::PipeDescriptor to open it, with SC::FileDescriptorOpenOptions::blocking == false
Returns the last offset set with AsyncFileRead::setOffset
|
inline |
Sets the offset in bytes at which start reading.
SC::Result SC::AsyncFileRead::start | ( | AsyncEventLoop & | eventLoop | ) |
Starts a file receive operation, that completes when data has been read from file / pipe.
eventLoop | The EventLoop to run this operation on |
SC::Result SC::AsyncFileRead::start | ( | AsyncEventLoop & | eventLoop, |
ThreadPool & | threadPool, | ||
Task & | task | ||
) |
Starts a file receive operation on thread pool, that completes when data has been read from file / pipe.
eventLoop | The EventLoop to run this operation on |
threadPool | The ThreadPool where to run this background operation |
task | The task used to run the operation on background thread. It's useful for any file not opened for direct IO (O_DIRECT / FILE_FLAG_WRITE_THROUGH & FILE_FLAG_NO_BUFFERING ). |
io_uring
backend, because that API allows proper async file read/writes. Span<char> SC::AsyncFileRead::buffer |
Callback called when some data has been read from the file into the buffer.
FileDescriptor::Handle SC::AsyncFileRead::fileDescriptor |
The writeable span of memory where to data will be written.