• 《信息安全系统设计基础》第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:

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

  • 相关阅读:
    Xcode 10 关于 CocoaPods 安装失败的问题RuntimeError
    iOS 解决xcode设置全局断点后 执行视频播放时自动进入断点cxa_throw
    iOS swift String 换行显示
    iOS wkWebView点击链接无反应
    iOS swift跑马灯滚动可以点击
    iOS swift版本无限滚动轮播图
    iOS swift中比较模型数组是否相等
    iOS valueForKeyPath快速计算求和、平均值、最大、最小
    iOS 全屏播放网页视频退出后状态栏被隐藏
    vacabulary1
  • 原文地址:https://www.cnblogs.com/5314zkj/p/6135900.html
Copyright © 2020-2023  润新知