20145219 《信息安全系统设计基础》第10周学习总结

20145219 《信息安全系统设计基础》第10周学习总结

教材学习内容总结

附录A——错误处理

  • Unix风格的错误处理:函数返回值包括错误代码,也包括有用的结果
  • Posix风格的错误处理:返回0表示成功,返回非0表示失败;任何有用的结果都返回在通过引用传递进来的函数参数中。
  • DNS风格的错误处理:函数失败时返回NULL指针,并设置全局变量h_errno

cp1.c

  • cp命令使用格式:cp src dst

  • cp1.c功能:复制一个文件的内容到另一个文件

  • 如图,将cp1.c文件中的内容复制到了cpp.c

  • cp1.c文件内容

  • cpp.c文件内容

echostate.c

  • echostate.c功能:查看在命令行中输入命令时是否可见,可见返回1,不可见返回0

fileinfo.c

  • fileinfo.c功能:显示文件相关信息,包括如下方面:

      mode:st_mode        文件的类型和存取的权限         
      links:st_nlink      连到该文件的硬链接数目,刚建立的文件值为1
      user:st_uid         用户ID
      group:st_gid        组ID          
      size:st_size        文件字节数
      modtime:st_mtime    最后一次修改时间
      name:               输入的文件名
    

filesize.c

  • filesize.c功能:计算etc/passwd文件大小,结果显示文件字节数。

ls1.c

  • ls1.c功能:显示当前目录下的所有文件(只显示文件名)

ls2.c

  • ls2.c功能:显示当前目录下的所有文件详细信息,包括如下方面:

      st_mode     文件类型(模式、权限)
      st_nlink    文件链接数
      st_uid      用户所有者的ID
      st_gid      所属组的ID
      st_size     所占的字节数		
      st_mtime    文件最后修改时间
    

setecho.c

  • setecho.c功能:设置输入指令可见性:

      输入y(或是以y开头的一串字符):命令可见
      否则(即输入不以y开头的字符):命令不可见
    

    运行时结合运行echostate,可显示当前echo的状态

spwd.c

  • spwd.c功能:显示当前目录的绝对路径

testioctl.c

  • testioctl.c功能:计算当前终端设备的窗口大小(显示行、列数目)

who1.c

  • who1.c功能:显示系统中用户的信息

who2.c

  • ……经比对who2.cwho1.c的代码完全相同,先开始我以为自己下载错了,后来接连问了几个同学,他们的也是这样,我想,应该是老师您上传到QQ群里的代码出错了……

视频内容

  • ls命令

    -l显示详细信息,-a 列出隐藏目录

  • man ls

    查看ls的相关信息

  • 列出目录内容

    Linux中用目录树组织磁盘上的目录或文件

    • 目录是一种特殊的文件,内容是文件和目录的名字
    • 目录包含很多记录,每条记录代表一个目录或文件
    • 目录文件永远不会空,至少包括.和..两项
  • man -k directory | grep read

  • man 3 readdir

  • 读取文件属性

    • man -k file | grep status

    • man 2 stat

  • 文件权限

    st_mode为16位二进制整数

  • 模式转化为字符:二进制掩码用八进制表示

  • sys/stat.h中定义了S_IFREG和S_IFDIR两个判断是目录还是文件的两个掩码

  • 将用户ID转换成用户名

    cat /etc/passwd命令查看用户列表

  • 组ID转化为组名

    查看相关文件/etc/group

代码调试中的问题和解决过程

  • 问题1:运行cp1.c时出错,提示usage: ./cp1 source destination

  • 解决方法:看到错误提示中的source destination,我就知道应该是和文件的源地址有关,但是并不清楚该如何改正,我想到了使用man cp命令查看标准cp命令的使用方法,发现cp命令的使用格式应该是cp source dest,于是我使用相似的格式./cp1 cp1.c(源文件) cpp.c(目的文件)运行成功。

  • 问题2:编译fileinfo.c时显示warning警告信息。

  • 解决方法:不用解决,警告并不是错误,可以直接运行,警告信息是告诉我代码中发生了强制类型转换。

  • 问题3:运行fileinfo.c时既没有出现预期结果,也没有显示错误

  • 解决方法:我又看了一边代码,思考了一下这个代码的功能,发现自己没有指定要显示信息的文件,指定显示cp1.c文件信息后运行成功。

  • 问题4:我的虚拟机突然连不上网了,重启也没用……我的电脑是联网正常的。

  • 解决方法:还原虚拟机网络设置,步骤:选择编辑选项卡的虚拟网络编辑器选项,点击页面左下角的恢复默认设置按钮。(此步骤需要在虚拟机没有运行的时候操作)

本周代码托管截图

  • 代码托管连接
  • 第1~4周项目分文件夹时弄乱了已删除,从第五周开始存在新项目里。
  • PS:git上学期用还好好的,这学期就总是会出问题,果然当初新建项目时很重要,新建的项目格式有问题之后调整就很费劲,总是会莫名其妙(其实是对git命令的含义不了解)的传不上去,或者全部覆盖(碰见问题按照百度解决时跟自己预期的结果不同)……还好我的代码一直留着,覆盖也只是重新传一次相同的,就是上传时间会改……

本周代码行数统计截图

其他(感悟、思考等,可选)

本周学习了老师上传到QQ群的一些代码,对于每一个代码,我都先了解它的功能,然后逐行理解它每一句话的意思、参数等信息(这一部分主要是百度和参看13级学长学姐们第九、十周的博客),接着预期它的运行结果,最后在虚拟机上编译、运行进行结果验证。在学习过程中,我对于编程有了进一步的了解,对于C语言的一些知识做了回顾,也通过man命令对Linux的部分知识有了更细致的了解,掌握了man这个帮助命令的使用方法。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第零周 0/0 1/1 15/15 安装虚拟机
第一周 0/0 1/2 25/40 学习Linux命令
第二周 62/62 1/3 25/65 学习C编程
第三周 176/238 1/4 20/85 学习数的表示和计算
第五周 57/295 1/5 20/105 学习汇编语言,了解逆向思想
第六周 150/445 1/6 25/130 学习Y86处理器和HCL硬件描述语言
第七周 115/560 1/7 20/150 学习存储器相关知识
第八周 0/560 2/9 30/180 期中总结
第九周 186/746 2/11 20/200 Unix I/O及相关函数
第十周 423/1169 2/13 23/223 man、grep、cp、echostate、fileinfo、filesize、ls、setecho、spwd、testioctl、who代码的理解与调试

参考资料

原文地址:https://www.cnblogs.com/20145219songge/p/6081314.html