zoukankan      html  css  js  c++  java
  • 2017-2018-1 20155229 《信息安全系统设计基础》第六周学习总结

    2017-2018-1 20155229 《信息安全系统设计基础》第六周学习总结

    课上及课下补充的作业见下面链接

    [20155229 《信息安全系统设计基础》第六周作业补充]

    http://www.cnblogs.com/fyhtvxq/p/7750262.html

    教材学习内容总结

    进程创建和控制的系统调用函数

    waitpid

    • wait是waitpid函数的简单版本
    • waitpid()会暂时停止目前进程的执行,直到有信号来到或子进程结束。
    if ( childpid < 0 )
    {
        perror( "fork()" );
        exit( EXIT_FAILURE );
    }
    else if ( childpid == 0 )
    {
        puts( "In child process" );
        sleep( 3 );//让子进程睡眠3秒,看看父进程的行为
        printf("	child pid = %d
    ", getpid());
        printf("	child ppid = %d
    ", getppid());
        exit(EXIT_SUCCESS);
    }
    else
    {
        waitpid( childpid, &status, 0 );
        puts( "in parent" );
        printf( "	parent pid = %d
    ", getpid() );
        printf( "	parent ppid = %d
    ", getppid() );
        printf( "	child process exited with status %d 
    ", status );
    }
    exit(EXIT_SUCCESS);
    }
    

    如果代码中的“waitpid( childpid, &status, 0 );”行注释掉,程序执行结果如下:

    exec1

    • exec1.c代码运行如下

    • fork函数是用于创建一个子进程,该子进程几乎是父进程的副本,而有时我们希望子进程去执行另外的程序,exec函数族就提供了一个在进程中启动另一个程序执行的方法。可以根据指定的文件名或目录名找到可执行文件,并用它来取代原调用进程的数据段、代码段和堆栈段,在执行完之后,原调用进程的内容除了进程号外,其他全部被新程序的内容替换了。
    • 在使用exec函数族时,一定要加上错误判断语句,因为exec很容易执行失败

    env

    -getenv()读取环境变量的当前值的函数 ,getenv()用来取得参数envvar环境变量的内容

    原形:char *getenv(const char *name)

    用法:s=getenv("环境变量名");
       需先定义char *s;

    功能:返回一给定的环境变量值,环境变量名可大写或小写。如果指定的变量在环境中未定义,则返回一空串。

    • setenv函数是修改或添加环境变量的函数
    • environvar.c代码简单打印环境变量表

    信号机制

    Singal

    • 头文件#include<signal.h>用法:

    sighandler_t signal(int signum, sighandler_t handler);

    管道和I/O重定向

    pipe

    • pipe用来创建管道并将其两端连接到两个文件描述符,array[0]为读数据端的文件描述符,而array[1]则为写数据端的文件描述符,内部则隐藏在内核中,进程只能看到两个文件描述符

    • 管道它有自身的特点。
      (1)管道通信是单向的,并且遵守先进先出的原则,即先写入的数据先读出。
      (2)管道是一个无结构,无固定大小的字节流。
      (3) 管道把一个进程的标准输出和另一个进程的标准输入连接在一起。数据读出后就意味着从管道中移走了,消失了。其它的进程都不能
      再读到这些数据。就像我们平常见到的管子水流走了就没有了。 这点很重要!!
      (4) pipe这种管道用于两个有亲缘关系的进程之间。

    参考(linux进程pipe()函数

    • pipedemo.c创建管道并向自己发送数据

    • pipedemo1.c将pipe和fork结合,创建一对通过管道来通信的进程。在程序中显示了从键盘到进程,从进程到管道,再从管道到进程以及从进程回到终端的数据传输流

    • 关于grep -nr xxx /usr/include 命令的使用

    • grep -nr 查找宏定义,类型定义。这条语句可以用来查找关键字,全文搜索,并且可以直接查找文件内的内容

    • man -k key1 | grep key2| grep 2 : 根据关键字检索系统调用
    • 使用man -k sort | grep 3,可以更好的找到qsort

    教材学习中的问题和解决过程

    • 问题一:数组指针、指针数组、函数指针、指针函数的区别

    • 函数指针:重点在指针,表示它是一个指针,它指向的是一个函数。eg: int (*fun)();

    • 指针函数:重点在函数,表示它是一个函数,它的返回值是指针。 eg: int* fun();

    • 数组指针:重点在指针,表示它是一个指针,它指向的是一个数组。int (*fun)[8];

    • 指针数组:重点在数组,表示它是一个数组,它包含的元素是指针 itn* fun[8];

    左右法则:右左法则:首先从最里面的未定义的标识符看起,然后往右看,再往左看。每当遇到圆括号时,就应该掉转阅读方向。一旦解析完圆括号里面所有的东西,就跳出圆括号。重复这个过程直到整个声明

    参考数组指针、指针数组、函数指针、指针函数的区分

    指针数组 数组指针 指针函数 函数指针

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

    代码托管

    (statistics.sh脚本的运行结果截图)
    因做缓冲漏洞实验,虚拟机已崩,时间太紧,没来得及安装。用的是vmware上的虚拟机,所以无法进行代码统计。

    该问题会在下周解决(包括重新安装虚拟机、把代码补充完整、数据统计等)

    上周考试错题总结

    3( 多选题 | 1 分)

    对于int x; float f; double d;下面正确的是()

    A .x == (int)(double)x

    B .x==(int)(float)x

    C .f == -(-f)

    D .1.0/2 == 1/2.0

    E .(f+d)-f == d

    正确答案: A C D 我的答案: C D

    解析:从int转换成float,数字不会溢出,但是可能被舍入;从int或float转换成double,能够保留精确的数值;从float或者double转换成int,值将会向零舍入。

    17( 单选题 | 1 分)

    int x; x的二进制为[10010101], x>>4的值为()

    A .[10010101]

    B .[00001001]

    C .[11111001]

    D .[01010000]

    正确答案: C 我的答案: B

    解析:有符号的算术右移,左端补k个最高有效位的值。

    23( 多选题 | 1 分)

    下面和代码可移植性相关的C语言属性有()

    A .#define

    B .typedef

    C .sizeof()

    D .union

    正确答案: A B C 我的答案: A B 查看知识点

    解析:
    #define可以定义宏使得变量可移植,typedef可以使得类型可移植,sizeof()使得不同类型长度可移植

    35( 多选题 | 1 分)

    根据c89国际标准编译程序prog.c,下面正确的是()
    A .gcc prog.c

    B .gcc -ansi prog.c

    C .gcc -std=c89 prog.c

    D .gcc -std=gnull prog.c

    正确答案: B C 我的答案: A C

    解析:在ANSI,ISO C90中,gcc命令行选项为-ansi,-std=c89

    结对及互评

    点评模板:

    • 博客中值得学习的或问题:

    • 代码中值得学习的或问题:

    本周结对学习情况

    - [20155225](博客链接)
    - 结对照片
    - 结对学习内容
        本周我向江智宇同学请教了课上测试3
        共同学习第八、十章内容
    

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

    • 本周学习的是第八、十章的内容,还有因为在课堂上没完成课上测试3,所以多了两个内容,在做缓冲漏洞实验时一直显示段错误,内心很崩溃,还有第二天发现虚拟机没法进入桌面形式,尝试了各种方法也不能回到原来的样子。但还是坚持用vmware中的虚拟机完成了这周学习的内容。

    • 得到的教训是,以后实验楼上的实验,我再也不在自己虚拟机上做了,做崩了,还要重更新安装,重新安装很费时间,还很麻烦,以前的代码虽然可以git clone,但是内心是很拒绝这种事情发生的。实验楼上既然有条件,那在那上面做应该是没问题的。

    • 第八章让我很好的对每个函数进行了分析与了解,第十章的内容老师在课堂上上过一些,这让我在这周学习时,也能很好的理解与掌握。

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 15篇 400小时
    第一周 20/20 1/ 12/12
    第二周 42/62 1/2 8/20
    第三周 62/124 1/3 14/34
    第四周 61/185 1/4 10/44
    第五周 / 2/6 13/57
    第六周 / 2/8 17/74

    尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
    耗时估计的公式
    :Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

    参考:软件工程软件的估计为什么这么难软件工程 估计方法

    • 计划学习时间:18小时

    • 实际学习时间:17小时

    • 改进情况:这周学习内容比较多,和预估的时间差不多。

    (有空多看看现代软件工程 课件
    软件工程师能力自我评价表
    )

    参考资料

  • 相关阅读:
    C学习笔记-gcc
    C学习笔记-makefile
    C学习笔记-makefile
    C学习笔记-基础数据结构与算法
    上下左右居中 无固定高的div
    Touch事件 移动端touch触摸事件
    让更多浏览器支持html5元素的简单方法
    跨子域的iframe高度自适应
    10进制转16进制,16进制转10进制,随机出一个6位十六进制颜色值
    ajax原理和XmlHttpRequest对象
  • 原文地址:https://www.cnblogs.com/fyhtvxq/p/7750959.html
Copyright © 2011-2022 走看看