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 9d6e48869SDaniel P. Berrange * version 2 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" 25*db1015e9SEduardo Habkost #include "qom/object.h" 26d6e48869SDaniel P. Berrange 27d6e48869SDaniel P. Berrange #define TYPE_QIO_CHANNEL_FILE "qio-channel-file" 28*db1015e9SEduardo Habkost typedef struct QIOChannelFile QIOChannelFile; 29d6e48869SDaniel P. Berrange #define QIO_CHANNEL_FILE(obj) \ 30d6e48869SDaniel P. Berrange OBJECT_CHECK(QIOChannelFile, (obj), TYPE_QIO_CHANNEL_FILE) 31d6e48869SDaniel P. Berrange 32d6e48869SDaniel P. Berrange 33d6e48869SDaniel P. Berrange /** 34d6e48869SDaniel P. Berrange * QIOChannelFile: 35d6e48869SDaniel P. Berrange * 36d6e48869SDaniel P. Berrange * The QIOChannelFile object provides a channel implementation 37d6e48869SDaniel P. Berrange * that is able to perform I/O on block devices, character 38d6e48869SDaniel P. Berrange * devices, FIFOs, pipes and plain files. While it is technically 39d6e48869SDaniel P. Berrange * able to work on sockets too on the UNIX platform, this is not 40d6e48869SDaniel P. Berrange * portable to Windows and lacks some extra sockets specific 41d6e48869SDaniel P. Berrange * functionality. So the QIOChannelSocket object is recommended 42d6e48869SDaniel P. Berrange * for that use case. 43d6e48869SDaniel P. Berrange * 44d6e48869SDaniel P. Berrange */ 45d6e48869SDaniel P. Berrange 46d6e48869SDaniel P. Berrange struct QIOChannelFile { 47d6e48869SDaniel P. Berrange QIOChannel parent; 48d6e48869SDaniel P. Berrange int fd; 49d6e48869SDaniel P. Berrange }; 50d6e48869SDaniel P. Berrange 51d6e48869SDaniel P. Berrange 52d6e48869SDaniel P. Berrange /** 53d6e48869SDaniel P. Berrange * qio_channel_file_new_fd: 54d6e48869SDaniel P. Berrange * @fd: the file descriptor 55d6e48869SDaniel P. Berrange * 56d6e48869SDaniel P. Berrange * Create a new IO channel object for a file represented 57d6e48869SDaniel P. Berrange * by the @fd parameter. @fd can be associated with a 58d6e48869SDaniel P. Berrange * block device, character device, fifo, pipe, or a 59d6e48869SDaniel P. Berrange * regular file. For sockets, the QIOChannelSocket class 60d6e48869SDaniel P. Berrange * should be used instead, as this provides greater 61d6e48869SDaniel P. Berrange * functionality and cross platform portability. 62d6e48869SDaniel P. Berrange * 63d6e48869SDaniel P. Berrange * The channel will own the passed in file descriptor 64d6e48869SDaniel P. Berrange * and will take responsibility for closing it, so the 65d6e48869SDaniel P. Berrange * caller must not close it. If appropriate the caller 66d6e48869SDaniel P. Berrange * should dup() its FD before opening the channel. 67d6e48869SDaniel P. Berrange * 68d6e48869SDaniel P. Berrange * Returns: the new channel object 69d6e48869SDaniel P. Berrange */ 70d6e48869SDaniel P. Berrange QIOChannelFile * 71d6e48869SDaniel P. Berrange qio_channel_file_new_fd(int fd); 72d6e48869SDaniel P. Berrange 73d6e48869SDaniel P. Berrange /** 74d6e48869SDaniel P. Berrange * qio_channel_file_new_path: 75bcd711feSsochin.jiang * @path: the file path 76d6e48869SDaniel P. Berrange * @flags: the open flags (O_RDONLY|O_WRONLY|O_RDWR, etc) 77902f6e14SRoss Lagerwall * @mode: the file creation mode if O_CREAT is set in @flags 78d6e48869SDaniel P. Berrange * @errp: pointer to initialized error object 79d6e48869SDaniel P. Berrange * 80d6e48869SDaniel P. Berrange * Create a new IO channel object for a file represented 81d6e48869SDaniel P. Berrange * by the @path parameter. @path can point to any 82d6e48869SDaniel P. Berrange * type of file on which sequential I/O can be 83d6e48869SDaniel P. Berrange * performed, whether it be a plain file, character 84d6e48869SDaniel P. Berrange * device or block device. 85d6e48869SDaniel P. Berrange * 86d6e48869SDaniel P. Berrange * Returns: the new channel object 87d6e48869SDaniel P. Berrange */ 88d6e48869SDaniel P. Berrange QIOChannelFile * 89d6e48869SDaniel P. Berrange qio_channel_file_new_path(const char *path, 90d6e48869SDaniel P. Berrange int flags, 91d6e48869SDaniel P. Berrange mode_t mode, 92d6e48869SDaniel P. Berrange Error **errp); 93d6e48869SDaniel P. Berrange 942a6a4076SMarkus Armbruster #endif /* QIO_CHANNEL_FILE_H */ 95