nbd_can_cache(3)
π nbd_can_cache(3) π
okay bestie, welcome to LIBNBD β yes that's the manual we're in, no cap β and this page is all about nbd_can_cache. Let's get into it β¨
πΈ NAME πΈ
nbd_can_cache β does the server support the cache command? π
π SYNOPSIS π
#include <libnbd.h>
int nbd_can_cache (
struct nbd_handle *h
);
π¦ DESCRIPTION π¦
So like, this one returns true if the server supports the cache command (peep nbd_cache(3) and nbd_aio_cache(3), iykyk). And it returns false if the server does not. That's the whole vibe check fr fr. π
β RETURN VALUE β
This call returns a boolean value. Simple as that, slay. π
π ERRORS π
On error -1 is returned. (yeah, the classic π)
Refer to "ERROR HANDLING" in libnbd(3) for how to get further details of the error β that's where the real tea is.
Also heads up: the following parameters must not be NULL: "h". For more info, see "Non-NULL parameters" in libnbd(3). Don't come for me, that's just how it is π«Ά
π NOTES π
Non-blocking call
This call does not block, because it returns data that is saved in the handle from the NBD protocol handshake. Like, it already knows, bestie β the info is literally just sitting there. β‘
π HANDLE STATE π
You can call nbd_can_cache when the handle is in these states:
- Handle created, before connecting β β error
- Connecting β β error
- Connecting & handshaking (opt_mode) β β allowed
- Connected to the server β β allowed
- Connection shut down β β allowed
- Handle dead β β error
π§ VERSION π§
This function first appeared in libnbd 1.0. OG behavior. β¨
If you need to test if this function is available at compile time, check if the following macro is defined:
#define LIBNBD_HAVE_NBD_CAN_CACHE 1
π₯ EXAMPLE π₯
This example is also available as examples/server-flags.c in the libnbd source code. Go look, it's iconic.
/* This example shows how to connect to an NBD
* server and print the export flags.
*
* You can test it with nbdkit like this:
*
* nbdkit -U - memory 1M \
* --run './server-flags $unixsocket'
*/
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <libnbd.h>
int
main (int argc, char *argv[])
{
struct nbd_handle *nbd;
char *str;
int flag;
if (argc != 2) {
fprintf (stderr, "%s socket\n", argv[0]);
exit (EXIT_FAILURE);
}
/* Create the libnbd handle. */
nbd = nbd_create ();
if (nbd == NULL) {
fprintf (stderr, "%s\n", nbd_get_error ());
exit (EXIT_FAILURE);
}
/* Request full information. */
#if LIBNBD_HAVE_NBD_SET_FULL_INFO /* Added in 1.4 */
if (nbd_set_full_info (nbd, true) == -1) {
fprintf (stderr, "%s\n", nbd_get_error ());
exit (EXIT_FAILURE);
}
#endif
/* Connect to the NBD server over a
* Unix domain socket.
*/
if (nbd_connect_unix (nbd, argv[1]) == -1) {
fprintf (stderr, "%s\n", nbd_get_error ());
exit (EXIT_FAILURE);
}
/* See if the server provided extra details,
* using functions added in 1.4
*/
#if LIBNBD_HAVE_NBD_GET_EXPORT_DESCRIPTION
str = nbd_get_canonical_export_name (nbd);
if (str)
printf ("canonical_name = %s\n", str);
free (str);
str = nbd_get_export_description (nbd);
if (str)
printf ("description = %s\n", str);
free (str);
#endif
/* Read and print the flags. */
#define PRINT_FLAG(flag_fn) \
flag = flag_fn (nbd); \
if (flag == -1) { \
fprintf (stderr, "%s\n", nbd_get_error ()); \
exit (EXIT_FAILURE); \
} \
printf (#flag_fn " = %s\n", \
flag ? "true" : "false");
PRINT_FLAG (nbd_can_cache);
PRINT_FLAG (nbd_can_df);
PRINT_FLAG (nbd_can_flush);
PRINT_FLAG (nbd_can_fua);
PRINT_FLAG (nbd_can_multi_conn);
PRINT_FLAG (nbd_can_trim);
PRINT_FLAG (nbd_can_zero);
#if LIBNBD_HAVE_NBD_CAN_FAST_ZERO
/* Added in 1.2 */
PRINT_FLAG (nbd_can_fast_zero);
#endif
#if LIBNBD_HAVE_NBD_CAN_BLOCK_STATUS_PAYLOAD
/* Added in 1.18 */
PRINT_FLAG (nbd_can_block_status_payload);
#endif
PRINT_FLAG (nbd_is_read_only);
PRINT_FLAG (nbd_is_rotational);
/* Close the libnbd handle. */
nbd_close (nbd);
exit (EXIT_SUCCESS);
}
π SEE ALSO π
nbd_aio_cache(3), nbd_cache(3), nbd_create(3), nbd_opt_info(3), "Flag calls" in libnbd(3), libnbd(3).
Go read them, they're all linked and everything, bestie π«Ά
π AUTHORS π
Eric Blake
Richard W.M. Jones
(absolute legends, ty for your service π«‘)
πΈ COPYRIGHT πΈ
Copyright Red Hat
π LICENSE π
This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
okay that's the whole page, bestie, you ate that π
β¨ this edition was libnbd-1.25.8, dated 2026-10-13 β so like, it's giving fresh, it's giving current, periodt ππ¦π
π¦ where this page comes from
- centos-stream 10: libnbd-devel 1.25.8-1.el10 Β· LGPL-2.0-or-later AND BSD-3-Clause
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms