zoukankan      html  css  js  c++  java
  • # 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小时

    • 改进情况:

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

    参考资料

  • 相关阅读:
    Parameter Binding in ASP.NET Web API
    Which HTTP methods match up to which CRUD methods?
    ErrorHandling in asp.net web api
    HttpStatusCode
    Autofac Getting Started(默认的构造函数注入)
    Autofac Controlling Scope and Lifetime
    luvit 被忽视的lua 高性能框架(仿nodejs)
    undefined与null的区别
    VsCode中使用Emmet神器快速编写HTML代码
    字符串匹配---KMP算法
  • 原文地址:https://www.cnblogs.com/javasyn/p/7674709.html
Copyright © 2011-2022 走看看