• # 2017-2018-1 20155231 《信息安全系统设计基础》第4周学习总结


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

    教材学习内容总结

    第10章

    • read (int fd, void *buf, size_t n)(返回:若成功,则为读的字节数,若EOF则为0,若出错则为-1) write(int fd, const void *buf, size_t n)(返回:若成功则为写的字节数,若出错则为-1)
    • 通过调用rioreadn和riowriten函数,应用程序可以在存储器和文件之间直接传送数据。
    • 文件的元数据,就是关于文件的信息。
    int stat(const char *filename, struct stat *buf); int fstat(int fd, struct stat *buf); 
    
    • 描述符表:每个打开的描述符表项指向文件表中的一个表项。 文件表:打开的文件的集合是由一张文件表表示的,所有的进程共享这张表。包括文件位置、引用计数(当前指向该表项的描述符表项数),指向v-node表的指针。 v-node表:包含stat结构中大多数信息。
    • I/O重定向:使用dup2函数 dup2函数拷贝了描述符表表项oldfd到描述符表项newfd,覆盖描述符表项newfd的内容。若果newfd已经打开了,dup2会拷贝oldfd之前关闭newfd.
      标准的I/O 标准I/O库将一个打开的文件模型化为一个流,一个流就是一个指向FILE类型的结构指针,。stdinstdoutstdeer分别对应标准输入、标准输出、标准错误。

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

    • 问题1:不理解dup2函数的工作原理
    • 问题1解决方案:上网查询。 dup2函数跟dup函数相似,但dup2函数允许调用者规定一个有效描述符和目标描述符的id。dup2函数成功返回时,目标描述符(dup2函数的第二个参数)将变成源描述符(dup2函数的第一个参数)的复制品,换句话说,两个文件描述符现在都指向同一个文件,并且是函数第一个参数指向的文件

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

    • 问题1:head
    • 问题1解决方案:head从文件头读起,默认读取10行并打印。使用常用的文件操作open、close、read接口,设一换行(' ')换行计数器,做换行计数器的累计,累计到需要显示的数量跳出。

    主要代码:

    if((rfd = open(filename,O_RDONLY)) == -1)
        {
            fprintf(stderr,"%s:",argv[0]);
            return -1;
        }
    
        while((rlen = read(rfd,rbuf,READSIZE)) > 0){
            for(i=0; i < rlen; i++){
                if(rbuf[i] == '
    '){
                    pb = &rbuf[i];
                    if(++nent == nline)
                        break;
                }
            }
            if(nent == nline){
                printf("%.*s",pb-&rbuf[0]+1,rbuf);
                break;
            }
    

    运行截图为:

    • 问题2:tail
    • 问题2解决方案:tail从文件尾部读起,取距文件尾的n行,取得第n行距离文件尾的位置即可。所以我们仍需要使用常用的文件操作open、close、read接口,一换行计数器,还需要一个距文件尾的偏移量累加量。

    主要代码:

    //累计距文件尾的偏移量
                 if(nent != nline+1){
                     offs2end += len;
                 }
                 else {
                     offs2end += (&rbuf[len-1]-pb);
                     break;
                 }
                 memset(rbuf,0,READSIZE);
             }
         }
         if(offs_seek == -1)
             printerr(errno);
         return offs2end;
     }
    

    运行截图为:

    代码托管

    上周考试错题总结

    结对及互评

    点评模板:

    • 博客中值得学习的或问题:
      • xxx
      • xxx
      • ...
    • 代码中值得学习的或问题:
      • xxx
      • xxx
      • ...
    • 其他

    本周结对学习情况

    - [结对同学学号1](博客链接)
    - 结对照片
    - 结对学习内容
        - XXXX
        - XXXX
        - ...
    

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

    这次的实践od、head、tail,之前没有完成,通过上网查找、像同学问询,基本理解解决了问题。

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第四周 439/1300 1/4 30/90

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

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

    • 计划学习时间:15小时

    • 实际学习时间:11小时

    • 改进情况:

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

    参考资料

  • 相关阅读:
    angularjs里对JS的lowercase和uppercase的完善
    UVA
    UVA
    MySQL 8.0X的安装与卸载命令
    回文树(模板+例题)
    UESTC
    UVALive
    BZOJ
    ACM-ICPC 2018 南京赛区网络预赛 I Skr (马拉车+hash去重)或(回文树)
    ACM-ICPC 2018 南京赛区网络预赛 E AC Challenge(状压dp)
  • 原文地址:https://www.cnblogs.com/javasyn/p/7674709.html
Copyright © 2020-2023  润新知