zoukankan      html  css  js  c++  java
  • APUE学习笔记(2):lseek()练习与文件洞

    对于lseek函数早在大一的C语言课上就有接触,但是几乎没有使用过,只记得是和文件偏移操作相关的 看了APUE上的示例,又使用od工具查看了内容,果然很神奇,很新鲜 figure3.2.c [c] #include "apue.h" #include <fcntl.h> char buf1[] = "abcdefghij"; char buf2[] = "ABCDEFGHIJ"; int main(void) { int fd; if((fd = creat("file.hole", FILE_MODE)) < 0) err_sys("creat error"); if(write(fd, buf1, 10) != 10) err_sys("buf1 wirte error"); /* offset now = 10 */ if(lseek(fd, 16384, SEEK_SET) == -1) err_sys("lseek error"); /* offset now = 16384 */ if(write(fd, buf2, 10) != 10) err_sys("buf2 write error"); /* offset now = 16394 */ return 0; } [/c] 生成执行文件并运行后可以在目录发现一个名为file.hole的文件 [shell] od -c file.hole [/shell] 使用如上命令会查看到如下的信息: [code] 0000000   a   b   c   d   e   f   g   h   i   j            0000020                                * 0040000   A   B   C   D   E   F   G   H   I   J  0040013 [/code] OK,再用ll看看这个文件洞的信息 file.hole-info2 让我们创建一个相同大小的文件,比较一下这两个文件 使用dd命令创建一个指定大小的文件简直是太方便了。 [shell] dd if=/dev/zero of=./file.nohole bs=16394 count=1 [/shell] (如上bs指输入输出的块大小,count指处理的块数) 再来比较一下这两个文件 file.hole-file.nohole 图片前面的“8,20”是这个文件所占用的块数。可以发现文件洞与不存在文件洞是不同的,对啦,以前一直没使用过-s参数,看下ls的man说明: [code] -s, --size print the allocated size of each file, in blocks [/code] 既然这样,再扩展一点点吧,搜到了查看block块大小的命令,使用tune2fs命令 [shell] tune2fs -l /dev/sda3 [/shell] 输出了好多,不过有想要的东西 [code] tune2fs 1.42.8 (20-Jun-2013) Filesystem volume name:   <none> Last mounted on:          /boot Filesystem UUID:          126d717e-27fc-471f-9ebb-0088e5bfeedb Filesystem magic number:  0xEF53 Filesystem revision #:    1 (dynamic) Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super huge_file uninit_bg dir_nlink extra_isize Filesystem flags:         signed_directory_hash Default mount options:    user_xattr acl Filesystem state:         clean Errors behavior:          Continue Filesystem OS type:       Linux Inode count:              128016 Block count:              512000 Reserved block count:     25600 Free blocks:              376340 Free inodes:              127636 First block:              1 Block size:               1024 Fragment size:            1024 Reserved GDT blocks:      256 Blocks per group:         8192 Fragments per group:      8192 Inodes per group:         2032 Inode blocks per group:   254 Flex block group size:    16 Filesystem created:       Mon Mar 31 16:55:44 2014 Last mount time:          Fri Apr 11 21:35:38 2014 Last write time:          Fri Apr 11 21:35:38 2014 Mount count:              12 Maximum mount count:      -1 Last checked:             Mon Mar 31 16:55:44 2014 Check interval:           0 (<none>) Lifetime writes:          131 MB Reserved blocks uid:      0 (user root) Reserved blocks gid:      0 (group root) First inode:              11 Inode size:              128 Journal inode:            8 Default directory hash:   half_md4 Directory Hash Seed:      77704dbb-7f94-4e98-9dbd-f173eab477fe Journal backup:           inode blocks [/code] 说的有点远了~~ 记录一下文件洞吧,第一次听说这个东东,在网上查了下,大概是说这个文件洞就是先分配空间,但不使用,比如数据库文件 在网上参看别人的文章,使用命令创建文件洞 链接:http://jianjiaosun.blog.163.com/blog/static/1361244862010111833451413/ 不过,还是有些不清楚的东西有待以后考证和研究 1,使用cat命令可以查看文件内容,file.hole中为“abcdefghijABCDEFGHIJ”file.nohole无内容。恩...这个还算正常。 2,使用vim打开file.hole,会导致文件块数从8便为20,而打开filehole和file.nofile文件会使大小增加一字节,也就是从16394变成16395,稍有不解 file.hole-file.nohole-change 3,文件的存储这块还很模糊,file.hole为什么占用8个块,file.nofile为什么占用10个块,上面查询到的block大小1024之间又有什么联系,还有待进一步的学习 好,收工,睡觉
  • 相关阅读:
    MAVEN 安装与配置
    MAVEN 常用仓库地址
    一些常用的工具
    springFramework 源码学习之源码下载与编译
    测试工程师学习笔记
    什么是多态
    聚簇索引与非聚簇索引
    正则表达式菜鸟教程
    我的第一篇博客
    转Hibernate继承
  • 原文地址:https://www.cnblogs.com/ishell/p/4240155.html
Copyright © 2011-2022 走看看