1d6e48869SDaniel P. Berrange /* 2d6e48869SDaniel P. Berrange * QEMU I/O channels files driver 3d6e48869SDaniel P. Berrange * 4d6e48869SDaniel P. Berrange * Copyright (c) 2015 Red Hat, Inc. 5d6e48869SDaniel P. Berrange * 6d6e48869SDaniel P. Berrange * This library is free software; you can redistribute it and/or 7d6e48869SDaniel P. Berrange * modify it under the terms of the GNU Lesser General Public 8d6e48869SDaniel P. Berrange * License as published by the Free Software Foundation; either 9c8198bd5SChetan Pant * version 2.1 of the License, or (at your option) any later version. 10d6e48869SDaniel P. Berrange * 11d6e48869SDaniel P. Berrange * This library is distributed in the hope that it will be useful, 12d6e48869SDaniel P. Berrange * but WITHOUT ANY WARRANTY; without even the implied warranty of 13d6e48869SDaniel P. Berrange * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14d6e48869SDaniel P. Berrange * Lesser General Public License for more details. 15d6e48869SDaniel P. Berrange * 16d6e48869SDaniel P. Berrange * You should have received a copy of the GNU Lesser General Public 17d6e48869SDaniel P. Berrange * License along with this library; if not, see <http://www.gnu.org/licenses/>. 18d6e48869SDaniel P. Berrange * 19d6e48869SDaniel P. Berrange */ 20d6e48869SDaniel P. Berrange 212a6a4076SMarkus Armbruster #ifndef QIO_CHANNEL_FILE_H 222a6a4076SMarkus Armbruster #define QIO_CHANNEL_FILE_H 23d6e48869SDaniel P. Berrange 24d6e48869SDaniel P. Berrange #include "io/channel.h" 25db1015e9SEduardo Habkost #include "qom/object.h" 26d6e48869SDaniel P. Berrange 27d6e48869SDaniel P. Berrange #define TYPE_QIO_CHANNEL_FILE "qio-channel-file" 288063396bSEduardo Habkost OBJECT_DECLARE_SIMPLE_TYPE(QIOChannelFile, QIO_CHANNEL_FILE) 29d6e48869SDaniel P. Berrange 30d6e48869SDaniel P. Berrange 31d6e48869SDaniel P. Berrange /** 32d6e48869SDaniel P. Berrange * QIOChannelFile: 33d6e48869SDaniel P. Berrange * 34d6e48869SDaniel P. Berrange * The QIOChannelFile object provides a channel implementation 35d6e48869SDaniel P. Berrange * that is able to perform I/O on block devices, character 36d6e48869SDaniel P. Berrange * devices, FIFOs, pipes and plain files. While it is technically 37d6e48869SDaniel P. Berrange * able to work on sockets too on the UNIX platform, this is not 38d6e48869SDaniel P. Berrange * portable to Windows and lacks some extra sockets specific 39d6e48869SDaniel P. Berrange * functionality. So the QIOChannelSocket object is recommended 40d6e48869SDaniel P. Berrange * for that use case. 41d6e48869SDaniel P. Berrange * 42d6e48869SDaniel P. Berrange */ 43d6e48869SDaniel P. Berrange 44d6e48869SDaniel P. Berrange struct QIOChannelFile { 45d6e48869SDaniel P. Berrange QIOChannel parent; 46d6e48869SDaniel P. Berrange int fd; 47d6e48869SDaniel P. Berrange }; 48d6e48869SDaniel P. Berrange 49d6e48869SDaniel P. Berrange 50d6e48869SDaniel P. Berrange /** 51d6e48869SDaniel P. Berrange * qio_channel_file_new_fd: 52d6e48869SDaniel P. Berrange * @fd: the file descriptor 53d6e48869SDaniel P. Berrange * 54d6e48869SDaniel P. Berrange * Create a new IO channel object for a file represented 55d6e48869SDaniel P. Berrange * by the @fd parameter. @fd can be associated with a 56d6e48869SDaniel P. Berrange * block device, character device, fifo, pipe, or a 57d6e48869SDaniel P. Berrange * regular file. For sockets, the QIOChannelSocket class 58d6e48869SDaniel P. Berrange * should be used instead, as this provides greater 59d6e48869SDaniel P. Berrange * functionality and cross platform portability. 60d6e48869SDaniel P. Berrange * 61d6e48869SDaniel P. Berrange * The channel will own the passed in file descriptor 62d6e48869SDaniel P. Berrange * and will take responsibility for closing it, so the 63d6e48869SDaniel P. Berrange * caller must not close it. If appropriate the caller 64d6e48869SDaniel P. Berrange * should dup() its FD before opening the channel. 65d6e48869SDaniel P. Berrange * 66d6e48869SDaniel P. Berrange * Returns: the new channel object 67d6e48869SDaniel P. Berrange */ 68d6e48869SDaniel P. Berrange QIOChannelFile * 69d6e48869SDaniel P. Berrange qio_channel_file_new_fd(int fd); 70d6e48869SDaniel P. Berrange 71d6e48869SDaniel P. Berrange /** 72*4760cedcSFabiano Rosas * qio_channel_file_new_dupfd: 73*4760cedcSFabiano Rosas * @fd: the file descriptor 74*4760cedcSFabiano Rosas * @errp: pointer to initialized error object 75*4760cedcSFabiano Rosas * 76*4760cedcSFabiano Rosas * Create a new IO channel object for a file represented by the @fd 77*4760cedcSFabiano Rosas * parameter. Like qio_channel_file_new_fd(), but the @fd is first 78*4760cedcSFabiano Rosas * duplicated with dup(). 79*4760cedcSFabiano Rosas * 80*4760cedcSFabiano Rosas * The channel will own the duplicated file descriptor and will take 81*4760cedcSFabiano Rosas * responsibility for closing it, the original FD is owned by the 82*4760cedcSFabiano Rosas * caller. 83*4760cedcSFabiano Rosas * 84*4760cedcSFabiano Rosas * Returns: the new channel object 85*4760cedcSFabiano Rosas */ 86*4760cedcSFabiano Rosas QIOChannelFile * 87*4760cedcSFabiano Rosas qio_channel_file_new_dupfd(int fd, Error **errp); 88*4760cedcSFabiano Rosas 89*4760cedcSFabiano Rosas /** 90d6e48869SDaniel P. Berrange * qio_channel_file_new_path: 91bcd711feSsochin.jiang * @path: the file path 92d6e48869SDaniel P. Berrange * @flags: the open flags (O_RDONLY|O_WRONLY|O_RDWR, etc) 93902f6e14SRoss Lagerwall * @mode: the file creation mode if O_CREAT is set in @flags 94d6e48869SDaniel P. Berrange * @errp: pointer to initialized error object 95d6e48869SDaniel P. Berrange * 96d6e48869SDaniel P. Berrange * Create a new IO channel object for a file represented 97d6e48869SDaniel P. Berrange * by the @path parameter. @path can point to any 98d6e48869SDaniel P. Berrange * type of file on which sequential I/O can be 99d6e48869SDaniel P. Berrange * performed, whether it be a plain file, character 100d6e48869SDaniel P. Berrange * device or block device. 101d6e48869SDaniel P. Berrange * 102d6e48869SDaniel P. Berrange * Returns: the new channel object 103d6e48869SDaniel P. Berrange */ 104d6e48869SDaniel P. Berrange QIOChannelFile * 105d6e48869SDaniel P. Berrange qio_channel_file_new_path(const char *path, 106d6e48869SDaniel P. Berrange int flags, 107d6e48869SDaniel P. Berrange mode_t mode, 108d6e48869SDaniel P. Berrange Error **errp); 109d6e48869SDaniel P. Berrange 1102a6a4076SMarkus Armbruster #endif /* QIO_CHANNEL_FILE_H */ 111