FAT_IOCTL_GET_ATTRIBUTES2const
Get and set file attributes in a fat filesystem
Part of FAT_IOCTL_SET_ATTRIBUTES(2const).
Usage
#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);
Library
Standard C library (libc, -lc)
Overview
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 attribute 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.
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);
}
Releases
2 releases since Debian 13 (Trixie); the text changed 1 time.