dwww Home | Manual pages | Find package

FAT_IOCTL_SET_ATTRIBUTES(2const)               FAT_IOCTL_SET_ATTRIBUTES(2const)

NAME
       FAT_IOCTL_GET_ATTRIBUTES,  FAT_IOCTL_SET_ATTRIBUTES  -  get and set file
       attributes in a FAT filesystem

LIBRARY
       Standard C library (libc, -lc)

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

       int ioctl(int fd, FAT_IOCTL_GET_ATTRIBUTES, uint32_t *attr);
       int ioctl(int fd, FAT_IOCTL_SET_ATTRIBUTES, uint32_t *attr);

DESCRIPTION
       Files and directories in the FAT filesystem  possess  an  attribute  bit
       mask  that  can  be  read with FAT_IOCTL_GET_ATTRIBUTES and written with
       FAT_IOCTL_SET_ATTRIBUTES.

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

       The attr argument contains a pointer to a bit mask.  The bits of the bit
       mask are:

       ATTR_RO
              This bit specifies that the file or directory is read-only.

       ATTR_HIDDEN
              This bit specifies that the file or directory is hidden.

       ATTR_SYS
              This bit specifies that the file is a system file.

       ATTR_VOLUME
              This bit specifies that the file is a  volume  label.   This  at-
              tribute is read-only.

       ATTR_DIR
              This  bit  specifies that this is a directory.  This attribute is
              read-only.

       ATTR_ARCH
              This  bit  indicates  that  this  file  or  directory  should  be
              archived.   It  is set when a file is created or modified.  It is
              reset by an archiving system.

       The zero value ATTR_NONE can be used to indicate that no  attribute  bit
       is set.

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

STANDARDS
       Linux.

HISTORY
       Linux 2.6.12.

EXAMPLES
       The following program demonstrates the usage of ioctl(2)  to  manipulate
       file  attributes.   The program reads and displays the archive attribute
       of a file.  After inverting the value  of  the  attribute,  the  program
       reads and displays the attribute again.

       The  following  was  recorded  when  applying  the  program for the file
       /mnt/user/foo:

           # ./toggle_fat_archive_flag /mnt/user/foo
           Archive flag is set
           Toggling archive flag
           Archive flag is not set

   Program source (toggle_fat_archive_flag.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>

       /*
        * Read file attributes of a file on a FAT filesystem.
        * Output the state of the archive flag.
        */
       static uint32_t
       readattr(int fd)
       {
           int       ret;
           uint32_t  attr;

           ret = ioctl(fd, FAT_IOCTL_GET_ATTRIBUTES, &attr);
           if (ret == -1) {
               perror("ioctl");
               exit(EXIT_FAILURE);
           }

           if (attr & ATTR_ARCH)
               printf("Archive flag is set\n");
           else
               printf("Archive flag is not set\n");

           return attr;
       }

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

           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 and display the FAT file attributes.
            */
           attr = readattr(fd);

           /*
            * Invert archive attribute.
            */
           printf("Toggling archive flag\n");
           attr ^= ATTR_ARCH;

           /*
            * Write the changed FAT file attributes.
            */
           ret = ioctl(fd, FAT_IOCTL_SET_ATTRIBUTES, &attr);
           if (ret == -1) {
               perror("ioctl");
               exit(EXIT_FAILURE);
           }

           /*
            * Read and display the FAT file attributes.
            */
           readattr(fd);

           close(fd);

           exit(EXIT_SUCCESS);
       }

SEE ALSO
       ioctl(2), ioctl_fat(2)

Linux man-pages 6.9.1              2024-06-15  FAT_IOCTL_SET_ATTRIBUTES(2const)

Generated by dwww version 1.16 on Tue Dec 16 04:13:33 CET 2025.