xref: /qemu/include/io/channel-file.h (revision d6e48869a41b61bb2f4eb0a787c08225630feb9e)
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