| /* |
| * QEMU I/O channels files driver |
| * |
| * Copyright (c) 2015 Red Hat, Inc. |
| * |
| * 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.1 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, see <http://www.gnu.org/licenses/>. |
| * |
| */ |
| |
| #ifndef QIO_CHANNEL_FILE_H |
| #define QIO_CHANNEL_FILE_H |
| |
| #include "io/channel.h" |
| #include "qom/object.h" |
| |
| #define TYPE_QIO_CHANNEL_FILE "qio-channel-file" |
| OBJECT_DECLARE_SIMPLE_TYPE(QIOChannelFile, QIO_CHANNEL_FILE) |
| |
| |
| /** |
| * QIOChannelFile: |
| * |
| * The QIOChannelFile object provides a channel implementation |
| * that is able to perform I/O on block devices, character |
| * devices, FIFOs, pipes and plain files. While it is technically |
| * able to work on sockets too on the UNIX platform, this is not |
| * portable to Windows and lacks some extra sockets specific |
| * functionality. So the QIOChannelSocket object is recommended |
| * for that use case. |
| * |
| */ |
| |
| struct QIOChannelFile { |
| QIOChannel parent; |
| int fd; |
| }; |
| |
| |
| /** |
| * qio_channel_file_new_fd: |
| * @fd: the file descriptor |
| * |
| * Create a new IO channel object for a file represented |
| * by the @fd parameter. @fd can be associated with a |
| * block device, character device, fifo, pipe, or a |
| * regular file. For sockets, the QIOChannelSocket class |
| * should be used instead, as this provides greater |
| * functionality and cross platform portability. |
| * |
| * The channel will own the passed in file descriptor |
| * and will take responsibility for closing it, so the |
| * caller must not close it. If appropriate the caller |
| * should dup() its FD before opening the channel. |
| * |
| * Returns: the new channel object |
| */ |
| QIOChannelFile * |
| qio_channel_file_new_fd(int fd); |
| |
| /** |
| * qio_channel_file_new_dupfd: |
| * @fd: the file descriptor |
| * @errp: pointer to initialized error object |
| * |
| * Create a new IO channel object for a file represented by the @fd |
| * parameter. Like qio_channel_file_new_fd(), but the @fd is first |
| * duplicated with dup(). |
| * |
| * The channel will own the duplicated file descriptor and will take |
| * responsibility for closing it, the original FD is owned by the |
| * caller. |
| * |
| * Returns: the new channel object |
| */ |
| QIOChannelFile * |
| qio_channel_file_new_dupfd(int fd, Error **errp); |
| |
| /** |
| * qio_channel_file_new_path: |
| * @path: the file path |
| * @flags: the open flags (O_RDONLY|O_WRONLY|O_RDWR, etc) |
| * @mode: the file creation mode if O_CREAT is set in @flags |
| * @errp: pointer to initialized error object |
| * |
| * Create a new IO channel object for a file represented |
| * by the @path parameter. @path can point to any |
| * type of file on which sequential I/O can be |
| * performed, whether it be a plain file, character |
| * device or block device. |
| * |
| * Returns: the new channel object |
| */ |
| QIOChannelFile * |
| qio_channel_file_new_path(const char *path, |
| int flags, |
| mode_t mode, |
| Error **errp); |
| |
| #endif /* QIO_CHANNEL_FILE_H */ |