Linux学习-实验14-LINUX文件和目录编程

曾巧文 发布于:2012-6-17 20:09 分类:Linux学习 标签: Ubuntu linux 实验

1、实验目的

1、  理解Linux文件系统结构。

2、  掌握常见的目录文件操作函数的使用。

2、 实验内容

1、  练习opendirreaddirclosedir函数的使用,学习查看API文档:

Ø  使用vi/vim/gedit编写C源程序文件myls.c,程序代码如下所示:

Ø  使用gcc编译运行上面的程序:gcc  myls.c  -o  myls

  #include
  #include
  #include
  #include
  int main(int argc, const char *argv[])
  {
         DIR* dir = NULL;
         struct dirent *ptr = NULL;
         if(argc != 2)
         {
                printf("Usage: myls dir\n");
                _exit(1);
         }
         if((dir = opendir(argv[1])) == NULL)//
         {
                perror("open dir:");
                _exit(1);
         }
         else
        {
                while((ptr = readdir(dir)) != NULL)//
                {
                       printf("inode:%ld,name:%s,type:%d\n", ptr -> d_ino, ptr -> d_name, ptr ->d_type);//
                }
                closedir(dir);
        }
         return 0;
  }

Ø  根据程序运行结果,查看API文档,理解代码。给源代码的“//”后添加注释。提示:这个程序的功能类似ls命令的功能。(截图)

Ø  回答以下问题:

n  一个目录的数据块中存放的是什么类型(结构)的数据?

n  文件及目录

n  常见的文件类型有哪些?在用ls  -l命令查看目录详细信息时,如何辨别一个文件的类型。

n  常见的文件类型有:普通文件、目录、可执行文件,用ls  -l命令查看目录详细信息时,第一个字段表示的就是文件的类型

 

2、  :练习stat函数及stat结构体的使用:

Ø  使用vi/vim/gedit编写C源程序文件getstat.c,程序代码如下所示:

Ø  使用gcc编译运行上面的程序:gcc  getstat.c  -o  getstat

Ø  根据程序运行结果,查看API文档,理解代码。给源代码的“//”后添加注释。提示:这个程序的功能是打印给定文件的inode节点的相关信息。

Ø 

Ø  回答以下问题:

n  一个inode节点中存放的是什么数据?每个inode节点都有个编号,同一个分区是否会有编号相同的inode?不同分区呢?

n  一个inode节点中存放的是文件的属性

n  同一个分区不会有编号相同的inode,不同分区也会有相同的inode编号

n  inode的角度出发,解释硬链接和符号链接的区别。

n  inode的角度来说两个不同的硬链接的inode相同,符号链接的inode不相同

n  新创建一个目录,这目录的硬链接数等于多少?这个目录的父目录硬链接数有变化吗?

n  这目录的硬链接数等于2,这个目录的父目录硬链接数加1

 

3、  理解ext2文件系统。

Ø  下图是一个ext2类型的文件系统的示意图,解释图中的Block Bitmapinode Bitmapinode TableData Blocks各自存放什么数据。

Ø  Block Bitmap用于描述整个块组中哪些块已被使用,哪些块还是空闲状态;

Ø  inode Bitmap用于描述inode表中哪些inode已被使用,哪些inode还没有使用

Ø  inode Table存放一个块组中所有的inodeData Blocks存放文件的数据

Linux学习-实验14-LINUX文件和目录编程

Ø  下图是一个反映目录类型文件的数据块存放的数据结构的示意图。回答以下问题:

n  下图中的name1name3inode相同,这两个文件是什么关系。

n  name1name3是同一个目录

n  删除name3,这个文件的内容会被删除吗?从文件系统的角度说明这个过程。

n  文件系统的角度来说,不会,因为name1name3indoe相同,都指向这个文件

n  把一个目录/home/zsc/dir1移动(或者叫改名为)/home/zsc/dir2,从文件系统的角度说明这个过程。

n  根据挂载点信息,访问文件所在分区,根据超级块的信息找到inode表的位置,读取inode表中编号为2inode信息,访问/目录的数据块内容,找到文件名为home的记录项,获得homeinode编号,根据homeinode编号,查看homeinode信息,访问home目录的数据块内容,找到文件名为zsc的记录项,获得zscinode编号,根据zscinode编号,查看zscinode信息,访问zsc目录的数据块内容,从zsc中的数据块中找到文件名为dir1的记录项,获得dir1inode编号,根据dir1inode编号,修改dir1inode信息

说明: 45510_070810221432

 

版权所有:《曾巧文博客-关注互联网IT技术,记录生活点滴》 => 《Linux学习-实验14-LINUX文件和目录编程
本文地址://qiaowen.net/post-1233.html
除非注明,文章均为 《曾巧文博客-关注互联网IT技术,记录生活点滴》 原创,欢迎转载!转载请注明本文地址,谢谢。

有 4998 人浏览,获得评论 0 条

发表评论:

Powered by emlog 粤ICP备12040901号

>>本作品采用-知识共享署名-非商业-禁止演绎-协议-进行许可 |站点地图 | | | | 开放分类目录 |