common: compile libconfig as C++
[lttng-tools.git] / src / common / fs-handle.h
CommitLineData
f5ea0241 1/*
ab5be9fa 2 * Copyright (C) 2020 Jérémie Galarneau <jeremie.galarneau@efficios.com>
f5ea0241 3 *
ab5be9fa 4 * SPDX-License-Identifier: LGPL-2.1-only
f5ea0241 5 *
f5ea0241
JG
6 */
7
8#ifndef FS_HANDLE_H
9#define FS_HANDLE_H
10
11#include <common/macros.h>
8bb66c3c 12#include <stdio.h>
f5ea0241 13
ac497a37
SM
14#ifdef __cplusplus
15extern "C" {
16#endif
17
f5ea0241
JG
18struct fs_handle;
19
20/*
21 * Marks the handle as the most recently used and marks the 'fd' as
22 * "in-use". This prevents the tracker from recycling the underlying
23 * file descriptor while it is actively being used by a thread.
24 *
25 * Don't forget that the tracker may be initiating an fd 'suspension'
26 * from another thread as the need to free an fd slot may arise from any
27 * thread within the daemon.
28 *
29 * Note that a restorable fd should never be held for longer than
30 * strictly necessary (e.g. the duration of a syscall()).
31 *
32 * Returns the fd on success, otherwise a negative value may be returned
33 * if the restoration of the fd failed.
34 */
f5ea0241
JG
35int fs_handle_get_fd(struct fs_handle *handle);
36
37/*
38 * Used by the caller to signal that it is no longer using the underlying fd and
39 * that it may be safely suspended.
40 */
f5ea0241
JG
41void fs_handle_put_fd(struct fs_handle *handle);
42
43/*
44 * Unlink the file associated to an fs_handle. Note that the unlink
45 * operation will not be performed immediately. It will only be performed
46 * once all references to the underlying file (through other fs_handle objects)
47 * have been released.
48 *
49 * However, note that the file will be renamed so as to provide the observable
50 * effect of an unlink(), that is removing a name from the filesystem.
51 *
52 * Returns 0 on success, otherwise a negative value will be returned
53 * if the operation failed.
54 */
f5ea0241
JG
55int fs_handle_unlink(struct fs_handle *handle);
56
57/*
58 * Frees the handle and discards the underlying fd.
59 */
f5ea0241
JG
60int fs_handle_close(struct fs_handle *handle);
61
8bb66c3c
JG
62ssize_t fs_handle_read(struct fs_handle *handle, void *buf, size_t count);
63
8bb66c3c
JG
64ssize_t fs_handle_write(struct fs_handle *handle, const void *buf, size_t count);
65
8bb66c3c
JG
66int fs_handle_truncate(struct fs_handle *handle, off_t offset);
67
3e778ab0 68off_t fs_handle_seek(struct fs_handle *handle, off_t offset, int whence);
8bb66c3c 69
ac497a37
SM
70#ifdef __cplusplus
71}
72#endif
73
f5ea0241 74#endif /* FS_HANDLE_H */
This page took 0.032703 seconds and 4 git commands to generate.