《信息安全系统设计基础》第12周学生博客问题总结

《信息安全系统设计基础》第12周学生博客问题总结

明确教材学习目标

第十二周(11.28-12.04)

学习目标

  1. 第九周代码检查
  2. 第十周代码检查
  3. 第十一周代码检查
  4. 项目
  5. 汇编堆栈调试

看了78位同学的本周博客后,我发现,本周大家基本上都是以下模式

  • 看视频,给出视频知识点
  • 继续实践上周代码
  • 完成汇编堆栈调试
  • 给出前几周链接

因此大家在本周遇到的问题并不多,所以我就逐个点开每个同学给出的前三周链接,结合前两位同学的问题总结:

4303石宇森 第十周问题总结

5211黄志远 第十一周问题总结

对此两位同学的总结进行重要问题提取和补缺补漏。

所遇问题及解决办法

问题1:git 上传代码时突然出现如下错误

  • 博客链接:20145219宋歌

    error: object file .git/objects/2a/xxxxxx is empty
    fatal: loose object xxxxxx (stored in .git/objects/2a/xxxxxx) is corrupt

我一直都只是每周添加一个文件夹存储本周内容,格式、之前的内容什么的从来没有改变过,不知道为什么突然不能正常git了。

  • 5219宋歌的解决方法:

我把错误粘贴到网上找到了解决方法,如下:

$ rm -fr .git  
$ git init  
$ git remote add origin your-git-remote-url  
$ git fetch  
$ git reset --hard origin/master  
$ git branch --set-upstream-to=origin/master master  

按照上面重新初始化了git仓库,然后git pull下来了之前的内容,之后再进行git add .就没有没问题了。

图1:

分析:git的问题经常会发生,宋歌这种情况也是很常见的。除了这种情况我们还可以参考以下博客来解决git问题:

最终还是需要看肖明的百科式博客:

Ubuntu下git的安装与使用

问题2(第九周的补充):行p598练习题10.1时,我的运行结果是fd=-1,不是应该出现的正确结果fd=3

  • 博客链接: 5219宋歌

    图2:

  • 5219宋歌的解决方法:

    我看着fd=-1的结果,想到之前学习课本open函数时,如果返回值是-1的话说明打开出错,只有打开成功,返回值为新文件描述符(返回的描述符总是在进程中当前没有打开的最小描述符)。后来,我打开代码又一次从第一行开始看,突然发现,我之前只顾着解决代码不能正常编译、运行的问题,却忘了新建两个open函数要打开的文件foo.txt和baz.txt,新建之后就成功了。之后的其他代码也像这个一样就没有问题了。

分析:对第九周问题的补充,问题分析很透彻,解决问题时结合了书上的元知识,也对代码进行分析。

问题3(第十一周的补充):运行cp1.c时出错,提示usage: ./cp1 source destination

  • 5219宋歌博客链接:5219宋歌第十一周问题

  • 5219宋歌的解决方法:

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

    图3:

分析:第十一周问题总结中没有出现这一问题,我认为这问题的解决思路特别好,所以将它再列入进来。宋歌遇到错误语句并不慌,分析里面的英语,有了解决思路,再用上了老师在课上演示过的man询问方法,最后解决问题,解决方式值得学习。

问题4(第十周的补充):编译fileinfo.c时显示warning警告信息。

  • 5219宋歌博客链接:5219宋歌第十周问题

  • 5219宋歌的解决方法:

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

图4:

分析:编译代码时遇到个警告想必每个同学都会觉得心里一惊,把这个问题归纳出来就是告诉更多忽视它的同学。它是强制类型转换的警告。

问题5:char **myargv;,为什么是**myargv

ps:这是个关于argv文件夹的文件的疑问

  • 5236冯佳的解决方法:

经过查阅得知,比较准确的说法是: **相相当于二级指针,char **就是指向字符型指针的指针。最常使用的地方就是 int main(int argc,char **argv),相当于int main(int argc,char *argv[])。也就是说,可以看作是指向了字符串数组。

分析:不算严格意义上的问题,是带着问题学习。学习方法很好,类似的学前问题总结如下:

  • errno与error的区别

    前者是记录系统最后一次错误的函数;后者是系统错误。

  • environ变量是什么? (environvar.c)

    该变量指向一个叫environment的字符串数组。包括USER(登录用户的名字),LOGNAME(与user类似),HOME(用户登录目录),LANG(地域名),PATH等。

  • PIPE_BUF的值是多少?(consumer.c)

    4096字节

  • FIFONAME是什么?

    这里需要补充一下fifo的含义,它是一种文件类型,可以通过查看文件stat结构中的stmode成员的值来判断文件是否是FIFO文件。fifo是用来在进程中使用文件来传输数据的,也具有管道特性,可以在数据读出的时候清除数据。

问题6:who|sort是怎么实现的?

  • 5212罗天晨博客链接:5212罗天晨

  • 5212罗天晨的解决方法:

    who把输出送给stdout,sort从stdin中读入数据,那也就是说who的stdout和sort的stdin连成了一个。

分析:首先问题就是使用指针会常用到的问题,初始化问题。然后提出了两种方式进行初始化,思路清晰。

问题7:exec中传入的参数str的结尾问题

  • 5319钟轲博客链接:5319钟轲

  • 问题描述:

    在学习exec1的时候,本来以为"arglist[2]"是用来指定执行路径的,后面发现是execvp函数要求传入的参数str必须要以NULL结尾,在执行psh1的时候也证实了,最后一个输入确实是NULL,但是为什么在我修改arglist[2]=".."时,却依然能够正常执行呢?而单纯删除掉arglist[2]=0时却显示是找不到路径?

  • 5319钟轲的解决方法:暂无

分析:这应该是本周问题里质量最高的一个,然而还是没有完全解决。是对输入结尾的讨论,我觉得钟轲前半部分分析很对,但是后面的操作有些问题。删掉的话直接会导致找不到路径,这让我想到大部分函数读入数据时,没有数据被读入,会返回0,如果发生错误,则返回EOF。还是有区别的。具体的还得娄老师来解析。

问题8:运行testpp.c代码时出现段错误

图5:

  • 5227鄢曼君博客链接:5227鄢曼君

  • 5227鄢曼君的解决方法:

    问题在于没给pp分配空间就调用了pp[0],毕竟声明的时候只是一个指针,而指针必须要初始化。有两种解决办法:

    (1)pp[0] = malloc(20);修改为pp = malloc(20); pp[0] = malloc(20); 然后即可成功。

    (2)把pp[0] = malloc(20);去掉[0],这样就分配了20个字节给了pp这个数组指针,再编译运行就ok了。

图6:

图7:

总结完毕,祝大家都能取得好成绩。

原文地址:https://www.cnblogs.com/5314zkj/p/6135900.html