FAT_IOCTL_GET_VOLUME_ID(2const)

NAME
FAT_IOCTL_GET_VOLUME_ID - read the volume ID in a FAT filesystem

LIBRARY
Standard C library (libc, -lc)

SYNOPSIS
#include <linux/msdos_fs.h>  /* Definition of FAT_* constants */
#include <sys/ioctl.h>

int ioctl(int fd, FAT_IOCTL_GET_VOLUME_ID, uint32_t *id);

DESCRIPTION
FAT filesystems are identified by a volume ID. The volume ID can be read with FAT_IOCTL_GET_VOLUME_ID.

The fd argument can be a file descriptor for any file or directory of the filesystem. It is sufficient to create the file descriptor by calling open(2) with the O_RDONLY flag.

The id argument is a pointer to the field that will be filled with the volume ID. Typically the volume ID is displayed to the user as a group of two 16-bit fields:

    printf("Volume ID %04x-%04x\n", id >> 16, id & 0xFFFF);

RETURN VALUE
On success, 0 is returned. On error, -1 is returned, and errno is set to indicate the error.

STANDARDS
Linux.

HISTORY
Linux 3.11.

EXAMPLES
The following program demonstrates the use of ioctl(2) to display the volume ID of a FAT filesystem.

The following output was recorded when applying the program for directory /mnt/user:

    $ ./display_fat_volume_id /mnt/user
    Volume ID 6443-6241

  Program source (display_fat_volume_id.c)
    #include <fcntl.h>
    #include <linux/msdos_fs.h>
    #include <stdint.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/ioctl.h>
    #include <unistd.h>

    int
    main(int argc, char *argv[])
    {
        int       fd;
        int       ret;
        uint32_t  id;

        if (argc != 2) {
            printf("Usage: %s FILENAME\n", argv[0]);
            exit(EXIT_FAILURE);
        }

        fd = open(argv[1], O_RDONLY);
        if (fd == -1) {
            perror("open");
            exit(EXIT_FAILURE);
        }

        /*
         * Read volume ID.
         */
        ret = ioctl(fd, FAT_IOCTL_GET_VOLUME_ID, &id);
        if (ret == -1) {
            perror("ioctl");
            exit(EXIT_FAILURE);
        }

        /*
         * Format the output as two groups of 16 bits each.
         */
        printf("Volume ID %04x-%04x\n", id >> 16, id & 0xFFFF);

        close(fd);

        exit(EXIT_SUCCESS);
    }

SEE ALSO
ioctl(2), ioctl_fat(2)