《Linux编程基础》第五章习题

一、填空题

  1. 磁盘中的第一个扇区非常重要,因为其中存储了与磁盘正常使用相关的重要信息,包括:(主引导记录)、(磁盘分区表)和魔数。
  2. 文件的 inode 编号可以通过(ls -i)命令查看,若要查看当前目录中普通文件 test.c 的 inode 编号,所用的命令为(ls -i test.c)。
  3. 在 ext2 文件系统中,磁盘分区中的空间会被分为多个组块,每个组块又分为 6 个部分,分别为:(超级块)、(组描述符表)、(块位图)、inode 位图、(inode 表)和数据块。
  4. 目录结构只是一个逻辑概念,只有将目录结构与物理存储设备关联起来,才能通过目录结构访问磁盘上的数据。Linux 系统中通过(挂载)的方式将物理地址与目录进行映射。
  5. Linux 系统中的文件可分为:(普通文件)、(目录文件)、设备文件和(特殊文件)。

二、判断题

  1. 在 Linux 系统的文件描述符表中,进程打开的普通文件的文件描述符从 3 开始。(√)
  2. 特殊文件中较为常见的是链接文件,链接文件包括软链接文件和硬链接文件。(×)
  3. 在 ext2 文件系统布局中,每个块组分为 6 个部分,即启动块、组描述符表、块位图、inode 位图、inode 表和数据块。(×)
  4. inode 结构体的索引数组中共有 15 个索引项,其中索引项 0~11 是直接索引项,索引项 12 是间接索引项,索引项 13 是二级间接索引,索引项 14 是三级间接索引。(√)
  5. Linux 系统中文件的后缀名不表示文件类型,只表示与程序的关联。(√)
  6. Linux 系统中文件的文件名存储在文件所在目录的 dentry 中,而非文件本身中。(√)

三、单选题

  1. 选出下列各选项中不属于特殊文件的选项。(D)

    A. 管道文件

    B. 符号链接文件

    C. 软链接文件

    D. 硬链接文件

  2. 选出下列选项中不属于 ext2 文件系统块组组成部分的选项。(A)

    A. 启动块

    B. 组描述符表

    C. inode 位图

    D. 数据块

  3. 已知 inode 结构体中的每个索引项占 4 个字节,假设数据块的大小为 1KB,那么一个二级索引项可索引的数据块数量为:(B)

    A. 256

    B. 25 6 2 256^2

    C. 25 6 3 256^3

    D. 102 4 2 1024^2

  4. 选出下列选项中用于创建文件系统的命令。(B)

    A. fdisk

    B. mkfs

    C. du

    D. mount

  5. 若系统中的硬盘驱动设备以图 5-3 所示的方式进行分区,那么以下各选项中,哪个文件不是与该设备对应的设备文件。(D)

    A. /dev/sda1

    B. /dev/sda5

    C. /dev/sda2

    D. /dev/sda3

  6. 若要删除一个文件,需要有哪种权限?(B)

    A. 对文件有读权限和执行权限

    B. 对文件有读权限和写权限

    C. 对文件有读、写和执行权限

    D. 对文件所在目录有写和执行权限

四、简答题

  1. 简单说明软链接文件和硬链接文件的区别。

    软链接文件的数据只是被链接文件的文件名;硬链接文件的属性信息除文件名外与源文件信息完全相同,本质上是普通文件。

  2. 已知 inode 结构体中共有 15 个索引项,其中直接索引项 12 个,间接索引项、二级索引项、三级索引项各一个,另外每个索引项的大小为 4 个字节,假设系统中每个数据块的大小为 1KB,计算 inode 结构体中索引项可索引的数据块总大小。

    ( 25 6 3 + 25 6 2 + 256 + 12 ) 1024 16.06 G B (256^3+256^2+256+12)*1024\approx16.06 GB

  3. 简述文件 I/O 与标准 I/O 的区别。

    文件 I/O 是一种无缓存 I/O;标准 I/O 在用户层建立了一个流缓存区,是一种有缓存 I/O。

五、编程题

  1. 编写程序,使用系统 I/O 从指定文件中读取数据并打印到终端。

    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <fcntl.h>
    #include <string.h>
    int main(){
        int fd=0;
        char filename[20]="/home/hzy/a.txt";
        fd=open(filename,O_RDONLY);
        if(fd==-1){
            perror("file open error.\n");
            exit(-1);
        }
        off_t f_size=0;
        f_size=lseek(fd,0,SEEK_END);
        lseek(fd,0,SEEK_SET);
        while(lseek(fd,0,SEEK_CUR)!=f_size){
            read(fd,buf,1024);
            printf("%s\n",buf);
        }
        close(fd);
        return 0;
    }
    

猜你喜欢

转载自blog.csdn.net/ShadowBurn/article/details/87903822