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