| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416 |
- /*
- * Copyright (c) 2009-2013 Apple Inc. All rights reserved.
- *
- * @APPLE_APACHE_LICENSE_HEADER_START@
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * @APPLE_APACHE_LICENSE_HEADER_END@
- */
- /*
- * IMPORTANT: This header file describes INTERNAL interfaces to libdispatch
- * which are subject to change in future releases of Mac OS X. Any applications
- * relying on these interfaces WILL break.
- */
- #ifndef __DISPATCH_IO_PRIVATE__
- #define __DISPATCH_IO_PRIVATE__
- #ifndef __DISPATCH_INDIRECT__
- #error "Please #include <dispatch/dispatch.h> instead of this file directly."
- #include <dispatch/base.h> // for HeaderDoc
- #endif
- DISPATCH_ASSUME_NONNULL_BEGIN
- __BEGIN_DECLS
- /*!
- * @function dispatch_read_f
- * Schedule a read operation for asynchronous execution on the specified file
- * descriptor. The specified handler is enqueued with the data read from the
- * file descriptor when the operation has completed or an error occurs.
- *
- * The data object passed to the handler will be automatically released by the
- * system when the handler returns. It is the responsibility of the application
- * to retain, concatenate or copy the data object if it is needed after the
- * handler returns.
- *
- * The data object passed to the handler will only contain as much data as is
- * currently available from the file descriptor (up to the specified length).
- *
- * If an unrecoverable error occurs on the file descriptor, the handler will be
- * enqueued with the appropriate error code along with a data object of any data
- * that could be read successfully.
- *
- * An invocation of the handler with an error code of zero and an empty data
- * object indicates that EOF was reached.
- *
- * The system takes control of the file descriptor until the handler is
- * enqueued, and during this time file descriptor flags such as O_NONBLOCK will
- * be modified by the system on behalf of the application. It is an error for
- * the application to modify a file descriptor directly while it is under the
- * control of the system, but it may create additional dispatch I/O convenience
- * operations or dispatch I/O channels associated with that file descriptor.
- *
- * @param fd The file descriptor from which to read the data.
- * @param length The length of data to read from the file descriptor,
- * or SIZE_MAX to indicate that all of the data currently
- * available from the file descriptor should be read.
- * @param queue The dispatch queue to which the handler should be
- * submitted.
- * @param context The application-defined context parameter to pass to
- * the handler function.
- * @param handler The handler to enqueue when data is ready to be
- * delivered.
- * param context Application-defined context parameter.
- * param data The data read from the file descriptor.
- * param error An errno condition for the read operation or
- * zero if the read was successful.
- */
- API_AVAILABLE(macos(10.9), ios(7.0))
- DISPATCH_EXPORT DISPATCH_NONNULL3 DISPATCH_NONNULL5 DISPATCH_NOTHROW
- void
- dispatch_read_f(dispatch_fd_t fd,
- size_t length,
- dispatch_queue_t queue,
- void *_Nullable context,
- void (*handler)(void *_Nullable context, dispatch_data_t data, int error));
- /*!
- * @function dispatch_write_f
- * Schedule a write operation for asynchronous execution on the specified file
- * descriptor. The specified handler is enqueued when the operation has
- * completed or an error occurs.
- *
- * If an unrecoverable error occurs on the file descriptor, the handler will be
- * enqueued with the appropriate error code along with the data that could not
- * be successfully written.
- *
- * An invocation of the handler with an error code of zero indicates that the
- * data was fully written to the channel.
- *
- * The system takes control of the file descriptor until the handler is
- * enqueued, and during this time file descriptor flags such as O_NONBLOCK will
- * be modified by the system on behalf of the application. It is an error for
- * the application to modify a file descriptor directly while it is under the
- * control of the system, but it may create additional dispatch I/O convenience
- * operations or dispatch I/O channels associated with that file descriptor.
- *
- * @param fd The file descriptor to which to write the data.
- * @param data The data object to write to the file descriptor.
- * @param queue The dispatch queue to which the handler should be
- * submitted.
- * @param context The application-defined context parameter to pass to
- * the handler function.
- * @param handler The handler to enqueue when the data has been written.
- * param context Application-defined context parameter.
- * param data The data that could not be written to the I/O
- * channel, or NULL.
- * param error An errno condition for the write operation or
- * zero if the write was successful.
- */
- API_AVAILABLE(macos(10.9), ios(7.0))
- DISPATCH_EXPORT DISPATCH_NONNULL2 DISPATCH_NONNULL3 DISPATCH_NONNULL5
- DISPATCH_NOTHROW
- void
- dispatch_write_f(dispatch_fd_t fd,
- dispatch_data_t data,
- dispatch_queue_t queue,
- void *_Nullable context,
- void (*handler)(void *_Nullable context, dispatch_data_t _Nullable data,
- int error));
- /*!
- * @function dispatch_io_create_f
- * Create a dispatch I/O channel associated with a file descriptor. The system
- * takes control of the file descriptor until the channel is closed, an error
- * occurs on the file descriptor or all references to the channel are released.
- * At that time the specified cleanup handler will be enqueued and control over
- * the file descriptor relinquished.
- *
- * While a file descriptor is under the control of a dispatch I/O channel, file
- * descriptor flags such as O_NONBLOCK will be modified by the system on behalf
- * of the application. It is an error for the application to modify a file
- * descriptor directly while it is under the control of a dispatch I/O channel,
- * but it may create additional channels associated with that file descriptor.
- *
- * @param type The desired type of I/O channel (DISPATCH_IO_STREAM
- * or DISPATCH_IO_RANDOM).
- * @param fd The file descriptor to associate with the I/O channel.
- * @param queue The dispatch queue to which the handler should be submitted.
- * @param context The application-defined context parameter to pass to
- * the cleanup handler function.
- * @param cleanup_handler The handler to enqueue when the system
- * relinquishes control over the file descriptor.
- * param context Application-defined context parameter.
- * param error An errno condition if control is relinquished
- * because channel creation failed, zero otherwise.
- * @result The newly created dispatch I/O channel or NULL if an error
- * occurred (invalid type specified).
- */
- API_AVAILABLE(macos(10.9), ios(7.0))
- DISPATCH_EXPORT DISPATCH_MALLOC DISPATCH_RETURNS_RETAINED DISPATCH_WARN_RESULT
- DISPATCH_NOTHROW
- dispatch_io_t
- dispatch_io_create_f(dispatch_io_type_t type,
- dispatch_fd_t fd,
- dispatch_queue_t queue,
- void *_Nullable context,
- void (*cleanup_handler)(void *_Nullable context, int error));
- /*!
- * @function dispatch_io_create_with_path_f
- * Create a dispatch I/O channel associated with a path name. The specified
- * path, oflag and mode parameters will be passed to open(2) when the first I/O
- * operation on the channel is ready to execute and the resulting file
- * descriptor will remain open and under the control of the system until the
- * channel is closed, an error occurs on the file descriptor or all references
- * to the channel are released. At that time the file descriptor will be closed
- * and the specified cleanup handler will be enqueued.
- *
- * @param type The desired type of I/O channel (DISPATCH_IO_STREAM
- * or DISPATCH_IO_RANDOM).
- * @param path The absolute path to associate with the I/O channel.
- * @param oflag The flags to pass to open(2) when opening the file at
- * path.
- * @param mode The mode to pass to open(2) when creating the file at
- * path (i.e. with flag O_CREAT), zero otherwise.
- * @param queue The dispatch queue to which the handler should be
- * submitted.
- * @param context The application-defined context parameter to pass to
- * the cleanup handler function.
- * @param cleanup_handler The handler to enqueue when the system
- * has closed the file at path.
- * param context Application-defined context parameter.
- * param error An errno condition if control is relinquished
- * because channel creation or opening of the
- * specified file failed, zero otherwise.
- * @result The newly created dispatch I/O channel or NULL if an error
- * occurred (invalid type or non-absolute path specified).
- */
- API_AVAILABLE(macos(10.9), ios(7.0))
- DISPATCH_EXPORT DISPATCH_NONNULL2 DISPATCH_MALLOC DISPATCH_RETURNS_RETAINED
- DISPATCH_WARN_RESULT DISPATCH_NOTHROW
- dispatch_io_t
- dispatch_io_create_with_path_f(dispatch_io_type_t type,
- const char *path, int oflag, mode_t mode,
- dispatch_queue_t queue,
- void *_Nullable context,
- void (*cleanup_handler)(void *_Nullable context, int error));
- /*!
- * @function dispatch_io_create_with_io_f
- * Create a new dispatch I/O channel from an existing dispatch I/O channel.
- * The new channel inherits the file descriptor or path name associated with
- * the existing channel, but not its channel type or policies.
- *
- * If the existing channel is associated with a file descriptor, control by the
- * system over that file descriptor is extended until the new channel is also
- * closed, an error occurs on the file descriptor, or all references to both
- * channels are released. At that time the specified cleanup handler will be
- * enqueued and control over the file descriptor relinquished.
- *
- * While a file descriptor is under the control of a dispatch I/O channel, file
- * descriptor flags such as O_NONBLOCK will be modified by the system on behalf
- * of the application. It is an error for the application to modify a file
- * descriptor directly while it is under the control of a dispatch I/O channel,
- * but it may create additional channels associated with that file descriptor.
- *
- * @param type The desired type of I/O channel (DISPATCH_IO_STREAM
- * or DISPATCH_IO_RANDOM).
- * @param io The existing channel to create the new I/O channel from.
- * @param queue The dispatch queue to which the handler should be submitted.
- * @param context The application-defined context parameter to pass to
- * the cleanup handler function.
- * @param cleanup_handler The handler to enqueue when the system
- * relinquishes control over the file descriptor
- * (resp. closes the file at path) associated with
- * the existing channel.
- * param context Application-defined context parameter.
- * param error An errno condition if control is relinquished
- * because channel creation failed, zero otherwise.
- * @result The newly created dispatch I/O channel or NULL if an error
- * occurred (invalid type specified).
- */
- API_AVAILABLE(macos(10.9), ios(7.0))
- DISPATCH_EXPORT DISPATCH_NONNULL2 DISPATCH_MALLOC DISPATCH_RETURNS_RETAINED
- DISPATCH_WARN_RESULT DISPATCH_NOTHROW
- dispatch_io_t
- dispatch_io_create_with_io_f(dispatch_io_type_t type,
- dispatch_io_t io,
- dispatch_queue_t queue,
- void *_Nullable context,
- void (*cleanup_handler)(void *_Nullable context, int error));
- /*!
- * @typedef dispatch_io_handler_function_t
- * The prototype of I/O handler functions for dispatch I/O operations.
- *
- * @param context Application-defined context parameter.
- * @param done A flag indicating whether the operation is complete.
- * @param data The data object to be handled.
- * @param error An errno condition for the operation.
- */
- typedef void (*dispatch_io_handler_function_t)(void *_Nullable context,
- bool done, dispatch_data_t _Nullable data, int error);
- /*!
- * @function dispatch_io_read_f
- * Schedule a read operation for asynchronous execution on the specified I/O
- * channel. The I/O handler is enqueued one or more times depending on the
- * general load of the system and the policy specified on the I/O channel.
- *
- * Any data read from the channel is described by the dispatch data object
- * passed to the I/O handler. This object will be automatically released by the
- * system when the I/O handler returns. It is the responsibility of the
- * application to retain, concatenate or copy the data object if it is needed
- * after the I/O handler returns.
- *
- * Dispatch I/O handlers are not reentrant. The system will ensure that no new
- * I/O handler instance is invoked until the previously enqueued handler
- * function has returned.
- *
- * An invocation of the I/O handler with the done flag set indicates that the
- * read operation is complete and that the handler will not be enqueued again.
- *
- * If an unrecoverable error occurs on the I/O channel's underlying file
- * descriptor, the I/O handler will be enqueued with the done flag set, the
- * appropriate error code and a NULL data object.
- *
- * An invocation of the I/O handler with the done flag set, an error code of
- * zero and an empty data object indicates that EOF was reached.
- *
- * @param channel The dispatch I/O channel from which to read the data.
- * @param offset The offset relative to the channel position from which
- * to start reading (only for DISPATCH_IO_RANDOM).
- * @param length The length of data to read from the I/O channel, or
- * SIZE_MAX to indicate that data should be read until EOF
- * is reached.
- * @param queue The dispatch queue to which the I/O handler should be
- * submitted.
- * @param context The application-defined context parameter to pass to
- * the handler function.
- * @param io_handler The I/O handler to enqueue when data is ready to be
- * delivered.
- * param context Application-defined context parameter.
- * param done A flag indicating whether the operation is complete.
- * param data An object with the data most recently read from the
- * I/O channel as part of this read operation, or NULL.
- * param error An errno condition for the read operation or zero if
- * the read was successful.
- */
- API_AVAILABLE(macos(10.9), ios(7.0))
- DISPATCH_EXPORT DISPATCH_NONNULL1 DISPATCH_NONNULL4 DISPATCH_NONNULL6
- DISPATCH_NOTHROW
- void
- dispatch_io_read_f(dispatch_io_t channel,
- off_t offset,
- size_t length,
- dispatch_queue_t queue,
- void *_Nullable context,
- dispatch_io_handler_function_t io_handler);
- /*!
- * @function dispatch_io_write_f
- * Schedule a write operation for asynchronous execution on the specified I/O
- * channel. The I/O handler is enqueued one or more times depending on the
- * general load of the system and the policy specified on the I/O channel.
- *
- * Any data remaining to be written to the I/O channel is described by the
- * dispatch data object passed to the I/O handler. This object will be
- * automatically released by the system when the I/O handler returns. It is the
- * responsibility of the application to retain, concatenate or copy the data
- * object if it is needed after the I/O handler returns.
- *
- * Dispatch I/O handlers are not reentrant. The system will ensure that no new
- * I/O handler instance is invoked until the previously enqueued handler
- * function has returned.
- *
- * An invocation of the I/O handler with the done flag set indicates that the
- * write operation is complete and that the handler will not be enqueued again.
- *
- * If an unrecoverable error occurs on the I/O channel's underlying file
- * descriptor, the I/O handler will be enqueued with the done flag set, the
- * appropriate error code and an object containing the data that could not be
- * written.
- *
- * An invocation of the I/O handler with the done flag set and an error code of
- * zero indicates that the data was fully written to the channel.
- *
- * @param channel The dispatch I/O channel on which to write the data.
- * @param offset The offset relative to the channel position from which
- * to start writing (only for DISPATCH_IO_RANDOM).
- * @param data The data to write to the I/O channel. The data object
- * will be retained by the system until the write operation
- * is complete.
- * @param queue The dispatch queue to which the I/O handler should be
- * submitted.
- * @param context The application-defined context parameter to pass to
- * the handler function.
- * @param io_handler The I/O handler to enqueue when data has been delivered.
- * param context Application-defined context parameter.
- * param done A flag indicating whether the operation is complete.
- * param data An object of the data remaining to be
- * written to the I/O channel as part of this write
- * operation, or NULL.
- * param error An errno condition for the write operation or zero
- * if the write was successful.
- */
- API_AVAILABLE(macos(10.9), ios(7.0))
- DISPATCH_EXPORT DISPATCH_NONNULL1 DISPATCH_NONNULL3 DISPATCH_NONNULL4
- DISPATCH_NONNULL6 DISPATCH_NOTHROW
- void
- dispatch_io_write_f(dispatch_io_t channel,
- off_t offset,
- dispatch_data_t data,
- dispatch_queue_t queue,
- void *_Nullable context,
- dispatch_io_handler_function_t io_handler);
- /*!
- * @function dispatch_io_barrier_f
- * Schedule a barrier operation on the specified I/O channel; all previously
- * scheduled operations on the channel will complete before the provided
- * barrier function is enqueued onto the global queue determined by the
- * channel's target queue, and no subsequently scheduled operations will start
- * until the barrier function has returned.
- *
- * If multiple channels are associated with the same file descriptor, a barrier
- * operation scheduled on any of these channels will act as a barrier across all
- * channels in question, i.e. all previously scheduled operations on any of the
- * channels will complete before the barrier function is enqueued, and no
- * operations subsequently scheduled on any of the channels will start until the
- * barrier function has returned.
- *
- * While the barrier function is running, it may safely operate on the channel's
- * underlying file descriptor with fsync(2), lseek(2) etc. (but not close(2)).
- *
- * @param channel The dispatch I/O channel to schedule the barrier on.
- * @param context The application-defined context parameter to pass to
- * the barrier function.
- * @param barrier The barrier function.
- */
- API_AVAILABLE(macos(10.9), ios(7.0))
- DISPATCH_EXPORT DISPATCH_NONNULL1 DISPATCH_NONNULL3 DISPATCH_NOTHROW
- void
- dispatch_io_barrier_f(dispatch_io_t channel,
- void *_Nullable context,
- dispatch_function_t barrier);
- __END_DECLS
- DISPATCH_ASSUME_NONNULL_END
- #endif /* __DISPATCH_IO_PRIVATE__ */
|