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