Linux
Application Development |
Michael K. Johnson Erik W. Troan |
/* checkflags.c - display info on ext2 extended attributes */ /* For each file name passed on the command line, display information on that file's ext2 attributes. */ #include <errno.h> #include <fcntl.h> #include <linux/ext2_fs.h> #include <stdio.h> #include <sys/ioctl.h> #include <unistd.h> int main(int argc, char ** argv) { char ** filename = argv + 1; int fd; int flags; /* Iterate over each file name on the command line. The last pointer in argv[] is NULL, so this while() loop is legal. */ while (*filename) { /* Unlike normal attributes, ext2 attributes can only be queried if we have a file descriptor (a file name isn't sufficient). We don't need write access to query the ext2 attributes, so O_RDONLY is fine. */ fd = open(*filename, O_RDONLY); if (fd < 0) { fprintf(stderr, "cannot open %s: %s\n", *filename, strerror(errno)); return 1; } /* This gets the attributes, and puts them into flags */ if (ioctl(fd, EXT2_IOC_GETFLAGS, &flags)) { fprintf(stderr, "ioctl failed on %s: %s\n", *filename, strerror(errno)); return 1; } printf("%s:", *filename++); /* Check for each attribute, and display a message for each one which is turned on. */ if (flags & EXT2_APPEND_FL) printf(" Append"); if (flags & EXT2_IMMUTABLE_FL) printf(" Immutable"); if (flags & EXT2_SYNC_FL) printf(" Sync"); if (flags & EXT2_NODUMP_FL) printf(" Nodump"); printf("\n"); close(fd); } return 0; };