- 论坛徽章:
- 0
|
回复 1# xiaoruoax
经过尝试发现,解决方法很简单。
只需要,先通过EXT2_IOC_GETFLAGS获取 ext2 flags,然后,将要设置的flag通过 “|” 操作附加上去,然后通过EXT2_IOC_SETFLAGS设置就可以成功,在CentOS 6.3 (x86_64)上面测试通过。设置完成后,通过lsattr可以查看设置的结果(chattr可以设置flags)。
示例代码如下:
- #include <sys/types.h>
- #include <unistd.h>
- #include <stdlib.h>
- #include <stdio.h>
- #include <fcntl.h>
- #include <linux/fs.h>
- #include <linux/ext2_fs.h>
- #include <sys/ioctl.h>
- #include <errno.h>
- int main(int argc, char *argv[])
- {
- int fd;
- long flags;
- if (argc != 2) {
- printf("Usage: %s <filename>\n", argv[0]);
- exit(EXIT_FAILURE);
- }
- if ((fd = open(argv[1], O_RDONLY)) < 0) {
- perror("open");
- exit(EXIT_FAILURE);
- }
- /* Get attributes from the file */
- if (ioctl(fd, EXT2_IOC_GETFLAGS, &flags)) {
- perror("ioctl");
- exit(EXIT_FAILURE);
- }
- /* Set attributes to the file */
- flags |= (EXT2_SYNC_FL | EXT2_NODUMP_FL);
- if (ioctl(fd, EXT2_IOC_SETFLAGS, &flags)) {
- perror("ioctl");
- close(fd);
- exit(EXIT_FAILURE);
- }
- if (flags & EXT2_SYNC_FL) {
- puts("SYNC flag set");
- }
- if (flags & EXT2_NODUMP_FL) {
- puts("NODUMP flag set");
- }
- close(fd);
- exit(EXIT_SUCCESS);
- }
复制代码 |
|