# FS_IOC_SETFLAGS

## NAME



           FS_IOC_GETFLAGS, FS_IOC_SETFLAGS - ioctl() operations for inode
           flags
    


## SYNOPSIS



           **#include <linux/fs.h>  **/* Definition of **FS_*** constants */
           **#include <sys/ioctl.h>**
    
           **int ioctl(int** _fd_**, FS_IOC_GETFLAGS, int ***_attr_**);**
           **int ioctl(int** _fd_**, FS_IOC_SETFLAGS, const int ***_attr_**);**
    


## DESCRIPTION



           Various Linux filesystems support the notion of _inode flags_ —
           attributes that modify the semantics of files and directories.
           These flags can be retrieved and modified using two ioctl(2)
           operations:
    
               int attr;
               fd = open("pathname", ...);
    
               ioctl(fd, FS_IOC_GETFLAGS, &attr);  /* Place current flags
                                                      in 'attr' */
               attr |= FS_NOATIME_FL;              /* Tweak returned bit mask */
               ioctl(fd, FS_IOC_SETFLAGS, &attr);  /* Update flags for inode
                                                      referred to by 'fd' */
    
           The lsattr(1) and chattr(1) shell commands provide interfaces to
           these two operations, allowing a user to view and modify the inode
           flags associated with a file.
    
           The following flags are supported (shown along with the
           corresponding letter used to indicate the flag by lsattr(1) and
           chattr(1)):
    
           **FS_APPEND_FL** 'a'
                  The file can be opened only with the **O_APPEND** flag.  If
                  applied to a directory, forbids removing files from the
                  directory (via **unlink**(), **rename**(), and the like).  (This
                  restriction applies even to the superuser.)  Only a
                  privileged process (**CAP_LINUX_IMMUTABLE**) can set or clear
                  this attribute.
    
           **FS_COMPR_FL** 'c'
                  Store the file in a compressed format on disk.  This flag
                  is _not_ supported by most of the mainstream filesystem
                  implementations; one exception is **btrfs**(5).
    
           **FS_DIRSYNC_FL** 'D' (since Linux 2.6.0)
                  Write directory changes synchronously to disk.  This flag
                  provides semantics equivalent to the mount(2) **MS_DIRSYNC**
                  option, but on a per-directory basis.  This flag can be
                  applied only to directories.
    
           **FS_IMMUTABLE_FL** 'i'
                  The file is immutable: no changes are permitted to the file
                  contents or metadata (permissions, timestamps, ownership,
                  link count, and so on).  (This restriction applies even to
                  the superuser.)  Only a privileged process
                  (**CAP_LINUX_IMMUTABLE**) can set or clear this attribute.
    
           **FS_JOURNAL_DATA_FL** 'j'
                  Enable journaling of file data on ext3(5) and ext4(5)
                  filesystems.  On a filesystem that is journaling in _ordered_
                  or _writeback_ mode, a privileged (**CAP_SYS_RESOURCE**) process
                  can set this flag to enable journaling of data updates on a
                  per-file basis.
    
           **FS_NOATIME_FL** 'A'
                  Don't update the file last access time when the file is
                  accessed.  This can provide I/O performance benefits for
                  applications that do not care about the accuracy of this
                  timestamp.  This flag provides functionality similar to the
                  mount(2) **MS_NOATIME** flag, but on a per-file basis.
    
           **FS_NOCOW_FL** 'C' (since Linux 2.6.39)
                  The file will not be subject to copy-on-write updates.
                  This flag has an effect only on filesystems that support
                  copy-on-write semantics, such as Btrfs.  See chattr(1) and
                  **btrfs**(5).
    
           **FS_NODUMP_FL** 'd'
                  Don't include this file in backups made using **dump**(8).
    
           **FS_NOTAIL_FL** 't'
                  This flag is supported only on Reiserfs.  It disables the
                  Reiserfs tail-packing feature, which tries to pack small
                  files (and the final fragment of larger files) into the
                  same disk block as the file metadata.
    
           **FS_PROJINHERIT_FL** 'P' (since Linux 4.5)
                  Inherit the quota project ID.  Files and subdirectories
                  will inherit the project ID of the directory.  This flag
                  can be applied only to directories.
    
           **FS_SECRM_FL** 's'
                  Mark the file for secure deletion.  This feature is not
                  implemented by any filesystem, since the task of securely
                  erasing a file from a recording medium is surprisingly
                  difficult.
    
           **FS_SYNC_FL** 'S'
                  Make file updates synchronous.  For files, this makes all
                  writes synchronous (as though all opens of the file were
                  with the **O_SYNC** flag).  For directories, this has the same
                  effect as the **FS_DIRSYNC_FL** flag.
    
           **FS_TOPDIR_FL** 'T'
                  Mark a directory for special treatment under the Orlov
                  block-allocation strategy.  See chattr(1) for details.
                  This flag can be applied only to directories and has an
                  effect only for ext2, ext3, and ext4.
    
           **FS_UNRM_FL** 'u'
                  Allow the file to be undeleted if it is deleted.  This
                  feature is not implemented by any filesystem, since it is
                  possible to implement file-recovery mechanisms outside the
                  kernel.
    
           In most cases, when any of the above flags is set on a directory,
           the flag is inherited by files and subdirectories created inside
           that directory.  Exceptions include **FS_TOPDIR_FL** , which is not
           inheritable, and **FS_DIRSYNC_FL** , which is inherited only by
           subdirectories.
    


## STANDARDS



           Linux.
    


## NOTES



           In order to change the inode flags of a file using the
           **FS_IOC_SETFLAGS** operation, the effective user ID of the caller
           must match the owner of the file, or the caller must have the
           **CAP_FOWNER** capability.
    


* * *