nbd_get_size3
Return the export size
Usage
#include <libnbd.h>int64_t nbd_get_size (struct nbd_handle *h);
Overview
Returns the size in bytes of the NBD export.
Note that this call fails with "EOVERFLOW" for an unlikely server that advertises a size which cannot fit in a 64-bit signed integer.
nbdinfo(1) --size option is a way to access this API from shell scripts.
This call does not block, because it returns data that is saved in the handle from the NBD protocol handshake.
Return value
This call returns a 64 bit signed integer ≥ 0.
Errors
On error -1 is returned.
Refer to "ERROR HANDLING" in libnbd(3) for how to get further details of the error.
The following parameters must not be NULL: "h". For more information see "Non-NULL parameters" in libnbd(3).
Handle state
nbd_get_size can be called when the handle is in the following 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.
If you need to test if this function is available at compile time check if the following macro is defined:
#define LIBNBD_HAVE_NBD_GET_SIZE 1
Examples
This example is also available as examples/get-size.c in the libnbd source code.
/* This example shows how to connect to an NBD* server and read the size of the disk.** You can test it with nbdkit like this:** nbdkit -U - memory 1M \* --run './get-size $unixsocket'*/#include <stdio.h>#include <stdlib.h>#include <stdint.h>#include <inttypes.h>#include <libnbd.h>intmain (int argc, char *argv[]){struct nbd_handle *nbd;int64_t size;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);}/* 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);}/* Read the size in bytes and print it. */size = nbd_get_size (nbd);if (size == -1) {fprintf (stderr, "%s\n", nbd_get_error ());exit (EXIT_FAILURE);}printf ("%s: size = %" PRIi64 " bytes\n",argv[1], size);/* Close the libnbd handle. */nbd_close (nbd);exit (EXIT_SUCCESS);}
Releases
4 releases since Debian 11 (Bullseye); the text changed 3 times.