# 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类型的结构指针,。stdin\stdout\stdeer分别对应标准输入、标准输出、标准错误。

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

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

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

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

主要代码:

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] == '\n'){
                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小时

  • 改进情况:

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

参考资料

posted @ 2017-10-15 22:42  名字最难取  阅读(129)  评论(0编辑  收藏  举报