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