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