fiemap使用示例

  •  示例程序代码
// https://blog.csdn.net/weiai3140/article/details/120405491
// make
// ./fiemap_demo test.txt
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sys/fcntl.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <linux/fs.h>
// #include "fiemap.h" //This is from https://github.com/coreutils/coreutils/blob/df88fce71651afb2c3456967a142db0ae4bf9906/src/fiemap.h
#include <linux/fiemap.h>

int main(int argc, char* argv[]) {

    int input_fd;
    int extents_size = 0;

    if(argc != 2){
        printf ("Usage: ioctl file1");
        return 1;
    }

    /* Create input file descriptor */
    input_fd = open (argv [1], O_RDWR);
    if (input_fd < 0) {
        perror ("open");
        return 2;
    }

    struct fiemap *fiemap;
    if ((fiemap = (struct fiemap*)malloc(sizeof(struct fiemap))) == NULL) {
        fprintf(stderr, "Out of memory allocating fiemap\n");
        return -1;
    }
    memset(fiemap, 0, sizeof(struct fiemap));

    fiemap->fm_start = 0;
    fiemap->fm_flags = 0;
    fiemap->fm_extent_count = 0;
    fiemap->fm_length = ~0;
    fiemap->fm_mapped_extents = 0;

    if (ioctl(input_fd, FS_IOC_FIEMAP, fiemap) < 0) {
        fprintf(stderr, "fiemap ioctl() failed\n");
        return -1;
    }


    printf("------------------------------------------------\n");
    printf("The first time to print the layout of this file.\n");
    printf("1 fiemap->fm_start:%lx\n",fiemap->fm_start);
    printf("2 fiemap->fm_length:%lx\n",fiemap->fm_length);
    printf("3 fiemap->fm_flags:%x\n",fiemap->fm_flags);
    printf("4 fiemap->fm_mapped_extents:%x\n",fiemap->fm_mapped_extents);
    printf("5 fiemap->fm_extent_count:%x\n",fiemap->fm_extent_count);
    printf("6 fiemap->fm_reserved:%x\n",fiemap->fm_reserved);
    printf("7 fiemap->fm_extents[0].fe_logical:%lx\n",fiemap->fm_extents[0].fe_logical);
    printf("8 fiemap->fm_extents[0].fe_physical:%lx\n",fiemap->fm_extents[0].fe_physical);
    printf("9 fiemap->fm_extents[0].fe_length:%lx\n",fiemap->fm_extents[0].fe_length);
    printf("10 fiemap->fm_extents[0].fe_reserved64[0]:%lx\n",fiemap->fm_extents[0].fe_reserved64[0]);
    printf("11 fiemap->fm_extents[0].fe_reserved64[1]:%lx\n",fiemap->fm_extents[0].fe_reserved64[1]);
    printf("12 fiemap->fm_extents[0].fe_flags:%lx\n",fiemap->fm_extents[0].fe_flags);
    printf("13 fiemap->fm_extents[0].fe_reserved[0]:%lx\n",fiemap->fm_extents[0].fe_reserved[0]);
    printf("14 fiemap->fm_extents[0].fe_reserved[1]:%lx\n",fiemap->fm_extents[0].fe_reserved[1]);
    printf("15 fiemap->fm_extents[0].fe_reserved[2]:%lx\n",fiemap->fm_extents[0].fe_reserved[2]);


    extents_size = sizeof(struct fiemap_extent)*(fiemap->fm_mapped_extents);

    if ((fiemap = (struct fiemap*)realloc(fiemap, sizeof(struct fiemap)+extents_size)) == NULL) {
        fprintf(stderr, "Out of memory allocating fiemap\n");
        return -1;
    }

    memset(fiemap->fm_extents, 0, extents_size);
    fiemap->fm_extent_count = fiemap->fm_mapped_extents;
    fiemap->fm_mapped_extents = 0;

    if (ioctl(input_fd, FS_IOC_FIEMAP, fiemap) < 0) {
        fprintf(stderr, "fiemap ioctl() failed\n");
        return -1;
    }

    printf("------------------------------------------------\n");
    printf("The second time to print the layout of this file.\n");
    printf("1 fiemap->fm_start:%lx\n",fiemap->fm_start);
    printf("2 fiemap->fm_length:%lx\n",fiemap->fm_length);
    printf("3 fiemap->fm_flags:%x\n",fiemap->fm_flags);
    printf("4 fiemap->fm_mapped_extents:%x\n",fiemap->fm_mapped_extents);
    printf("5 fiemap->fm_extent_count:%x\n",fiemap->fm_extent_count);
    printf("6 fiemap->fm_reserved:%x\n",fiemap->fm_reserved);
    printf("--------\n");
    printf("7 fiemap->fm_extents[0].fe_logical:%lx\n",fiemap->fm_extents[0].fe_logical);
    printf("8 fiemap->fm_extents[0].fe_physical:%lx\n",fiemap->fm_extents[0].fe_physical);
    printf("9 fiemap->fm_extents[0].fe_length:%lx\n",fiemap->fm_extents[0].fe_length);
    printf("7 fiemap->fm_extents[1].fe_logical:%lx\n",fiemap->fm_extents[1].fe_logical);
    printf("8 fiemap->fm_extents[1].fe_physical:%lx\n",fiemap->fm_extents[1].fe_physical);
    printf("9 fiemap->fm_extents[1].fe_length:%lx\n",fiemap->fm_extents[1].fe_length);
    printf("7 fiemap->fm_extents[2].fe_logical:%lx\n",fiemap->fm_extents[2].fe_logical);
    printf("8 fiemap->fm_extents[2].fe_physical:%lx\n",fiemap->fm_extents[2].fe_physical);
    printf("9 fiemap->fm_extents[2].fe_length:%lx\n",fiemap->fm_extents[2].fe_length);
    printf("7 fiemap->fm_extents[3].fe_logical:%lx\n",fiemap->fm_extents[3].fe_logical);
    printf("8 fiemap->fm_extents[3].fe_physical:%lx\n",fiemap->fm_extents[3].fe_physical);
    printf("9 fiemap->fm_extents[3].fe_length:%lx\n",fiemap->fm_extents[3].fe_length);

    /* Close file descriptors */
    close (input_fd);
    free(fiemap);

    return 0;
}
  • makefile
fiemap_demo: *.c
	gcc -o $@ $^
clean:
	rm fiemap_demo
  • test.txt
aaaaaaaaaaaaa
  • 执行结果
root@bigdata:~/hqb/projects/bigdata/lavacard_bigdata_vm2/toolkit/fiemap_demo# ./fiemap_demo test.txt 
------------------------------------------------
The first time to print the layout of this file.
1 fiemap->fm_start:0
2 fiemap->fm_length:ffffffffffffffff
3 fiemap->fm_flags:0
4 fiemap->fm_mapped_extents:1
5 fiemap->fm_extent_count:0
6 fiemap->fm_reserved:0
7 fiemap->fm_extents[0].fe_logical:0
8 fiemap->fm_extents[0].fe_physical:411
9 fiemap->fm_extents[0].fe_length:70616d6569662038
10 fiemap->fm_extents[0].fe_reserved64[0]:7478655f6d663e2d
11 fiemap->fm_extents[0].fe_reserved64[1]:5d305b73746e6574
12 fiemap->fm_extents[0].fe_flags:5f65662e
13 fiemap->fm_extents[0].fe_reserved[0]:67616c66
14 fiemap->fm_extents[0].fe_reserved[1]:64657672
15 fiemap->fm_extents[0].fe_reserved[2]:3a5d315b
------------------------------------------------
The second time to print the layout of this file.
1 fiemap->fm_start:0
2 fiemap->fm_length:ffffffffffffffff
3 fiemap->fm_flags:0
4 fiemap->fm_mapped_extents:1
5 fiemap->fm_extent_count:1
6 fiemap->fm_reserved:0
--------
7 fiemap->fm_extents[0].fe_logical:0
8 fiemap->fm_extents[0].fe_physical:d2093c9000
9 fiemap->fm_extents[0].fe_length:1000
7 fiemap->fm_extents[1].fe_logical:20911
8 fiemap->fm_extents[1].fe_physical:0
9 fiemap->fm_extents[1].fe_length:0
7 fiemap->fm_extents[2].fe_logical:0
8 fiemap->fm_extents[2].fe_physical:0
9 fiemap->fm_extents[2].fe_length:0
7 fiemap->fm_extents[3].fe_logical:0
8 fiemap->fm_extents[3].fe_physical:0
9 fiemap->fm_extents[3].fe_length:0

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值