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

教材学习内容总结

第十章:
打开关闭文件:
#include<unistd.h>int  open(char *filename ,int flags , mode_t mode);int close(int fd);
  • open函数将filename转换成一个文件描述符 ,出错为-1.

读写文件:

#include<unistd.h>ssize_t read(int fd ,void *buf,size_t n);ssize_t write(int fd ,void *buf,size_t n);
  • fd为文件描述符,即open函数的返回值,每次读入n个字符,存入buf地址的空间中。

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

(一个模板:我看了这一段文字 (引用文字),有这个问题 (提出问题)。 我查了资料,有这些说法(引用说法),根据我的实践,我得到这些经验(描述自己的经验)。 但是我还是不太懂,我的困惑是(说明困惑)。【或者】我反对作者的观点(提出作者的观点,自己的观点,以及理由)。 )

  • 问题1:如何正确理解Linux中的文件描述符与打开文件之间的关系
  • 问题1解决方案:
    1. 博客参考链接:文件描述符
  • 2.每一个文件描述符会与一个打开文件相对应,同时,不同的文件描述符也会指向同一个文件。相同的文件可以被不同的进程打开也可以在同一个进程中被多次打开。系统为每一个进程维护了一个文件描述符表,该表的值都是从0开始的,所以在不同的进程中你会看到相同的文件描述符,这种情况下相同文件描述符有可能指向同一个文件,也有可能指向不同的文件。具体情况要具体分析,要理解具体其概况如何,需要查看由内核维护的3个数据结构。
    1. 进程级的文件描述符表
    2. 系统级的打开文件描述符表
    3. 文件系统的i-node表

课上内容: myod-系统调用版本

  • 要求:
参考教材第十章内容
用Linux IO相关系统调用编写myod.c 用myod XXX实现Linux下od -tx -tc XXX的功能,注意XXX是文件名,通过命令行传入,不要让用户输入文件名
不要把代码都写入main函数中
要分模块,不要把代码都写入一个.c中
提交测试代码和运行结果截图, 提交调试过程截图,要全屏,包含自己的学号信息
课上上传代码到码云
  • 首先关于od -tx1 -tc 文件名 指令 就是将读入文件用16进ascll值输出,需要调用函数有读文件函数和打开关闭文件。
  • od命令中前面有7个数字是八进制数字,代表当前已有字符数,
  • 经过多次修改和卢子杰同学的指导修改后代吗如下:
  1. 头文件:整合了本程序要用到的头文件:
#ifndef HEAD_H
#define HEAD_H
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include<ctype.h>
#endif

2.产品代码myod:

#include"tou.h"  void main (int argc,char *argv[])
{ char ch[16];int a,j,i,x=0;int in=open(argv[1],O_RDONLY,0);printf("%07o",0);printf(" ");while((a=read(in,ch,16))!=0){x++;for(i=0;i<a;i++)if(!iscntrl(ch[i]))printf("%4x",ch[i]);printf("\n");
printf("        ");for(j=0;j<a;j++)if(!iscntrl(ch[j]))printf("%4c",ch[j]);printf("\n");printf("%07o",16*(x-1)+a);printf(" ");}close(in);}

运行结果截图:

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

  • 问题1:字符和其ASCLL码读写对不齐

  • 问题1解决方案:输出时候读入了换行符,用iscntrl函数进行控制,判断字符c是否为控制字符,如果是则返回非零值,加条件限定
if(!iscntrl(ch[j]))printf("%4c",ch[j]);

完成head,tail的使用,相关API的分析,伪代码,产品代码,测试代码的编写(3分)

  • head命令就是对文件打印代码,默认是从头开始打印前10行 ,也可以自定义打印
head -n 文件名
  • tail命令就是对文件打印代码,默认是从头开始打印后10行 ,也可以自定义打印
tail -n 文件名
  • 表示打印这个文件n行

伪代码:

  • myhead:
myHead  要打开的文件 {读入字符if(不是换行符)输出字符;else行数加1;if(读入10行)跳出循环;关闭文件}
  • mytail
mytail  要打开的文件 {读入所有字符,行数if(不是换行符)从最后一行输出字符;else行数减11;if(读入10行)跳出循环;关闭文件}

产品代码:

  • myhead:
#include"tou.h"  void main (int argc,char *argv[])
{ char ch[4000];int a,j,i,x=0;int in=open(argv[1],O_RDONLY,0);while((a=read(in,ch,4000))!=0){for(i=0;i<a;i++){if(ch[i]!='\n')printf("%c",ch[i]);else{ printf("\n");     x++;}if(x==11)break;}}close(in);}
  • mytail:
#include"tou.h"  void main (int argc,char *argv[])
{ char ch[4000];int a,i,j=0,x=0,line=0;int in=open(argv[1],O_RDONLY,0);while((a=read(in,ch,4000))!=0)
{for(i=0;i<a;i++)
{if(ch[i]=='\n')line++;else(j++);
}
}while((a=read(in,ch,4000))!=0){for(i=j;i>0,x<11;i--){if(ch[i]!='\n')printf("%c",ch[i]);else{ printf("\n");   x++ ;}if(x==11)break;}}close(in);}


代码托管


(statistics.sh脚本的运行结果截图)

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

世上无难事,只怕有心人,只要肯下功夫,所有东西都会明白的。这周东西是学会运用i/o接口去调用文件并输出文件,这周花了些功夫,感觉收获不错。

学习进度条

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

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

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

  • 计划学习时间:10小时

  • 实际学习时间:20小时

  • 改进情况:

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

参考资料

  • 《深入理解计算机系统V3》学习指导
  • ...

转载于:https://www.cnblogs.com/zx20155202/p/7672763.html

2017-2018-1 20155202 《信息安全系统设计基础》第4周学习总结相关推荐

  1. # 2017-2018-1 20155224 《信息安全系统设计基础》第九周学习总结

    2017-2018-1 20155224 <信息安全系统设计基础>第九周学习总结 教材学习内容总结 存储器 随机访问存储器(RAM): 静态RAM:用来作为高速缓存存储器,每个位存储在一个 ...

  2. 2018-2019-1 20165206 《信息安全系统设计基础》第九周学习总结

    - 2018-2019-1 20165206 <信息安全系统设计基础>第九周学习总结 - 教材学习内容总结 计算机系统的主存被组织成一个由M个连续的字节大小的单元组成的数组.每个字节都有一 ...

  3. 20135203齐岳 信息安全系统设计基础第十三周学习总结

    20135203齐岳 信息安全系统设计基础第十三周学习总结 学习计时:8/9共小时(计划/实际) 读书:4/5 代码:1/1 作业:1/1 博客:2/2 第十二章 并发编程 一.学习目标 掌握三种并发 ...

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

    20155337 2017-2018-1 <信息安全系统设计基础>第一周学习总结 教材学习内容总结 1.1信息就是位+上下文 hello.c程序是以字节序列的方式储存在文件中的.每个字节都 ...

  5. 20135219洪韶武——信息安全系统设计基础第五周学习总结

    信息安全系统设计基础第五周学习总结 学习任务:教材第四章[处理器体系结构] 学习时间:10小时  一.教材知识点梳理[4.1-4.3] 1.ISA[指令集体系结构] 一个处理器支持的指令和指令的字节级 ...

  6. 20145227《信息安全系统设计基础》第一周学习总结

    20145227<信息安全系统设计基础>第一周学习总结 学习内容总结 Linux是一个操作系统.如果使用GUI,Linux和Windows没有什么区别.Linux学习应用的一个特点是通过命 ...

  7. 2018-2019 20165203 《信息安全系统设计基础》第一周学习总结

    2018-2019-1 20165203 <信息安全系统设计基础>第一周学习总结 教材学习内容总结 编译:gcc [选项] [文件名] 选项参数表 参数 对应功能 -E 仅执行编译预处理 ...

  8. 2018-2019-1 20165221 《信息安全系统设计基础》第一周学习总结

    2018-2019-1 20165221 <信息安全系统设计基础>第一周学习总结 教材学习总结 有关vim 打开方式:vim [文件名] 按i会进入insert模式,可以对代码进行编辑 按 ...

  9. 2017-2018-1 20155209 《信息安全系统设计基础》第一周学习总结

    2017-2018-1 20155209 <信息安全系统设计基础>第一周学习总结 教材学习内容总结 计算机系统就是由可以看到的硬件和系统内的软件组成的,然后用来运行应用程序. 我们平时使用 ...

  10. 20145307《信息安全系统设计基础》第二周学习总结

    20145307<信息安全系统设计基础>第二周学习总结 教材学习内容总结 vim编辑器 Vim的6种基本模式:Vim具有6种基本模式和5种派生模式普通模式(Normal mode) Vim ...

最新文章

  1. R语言t分布函数Student t distribution(dt, pt, qt rt )实战
  2. PAT甲级1086 Tree Traversals Again:[C++题解]二叉树中序序列、栈、求后序遍历
  3. Ajax请求SSM后台传值方式踩坑
  4. ShellExecute 函数的用法和实例
  5. 允许使用抽象类类型 isearchboxinfo 的对象_此对象非彼对象(面向对象)3
  6. linux环境下启动git,linux系统安装git及git常用命令
  7. 使用“override”声明的成员函数不能重写基类成员_【进阶Python】第七讲:接口与抽象基类...
  8. 关于电脑是否需要安装杀毒软件的解答
  9. java识别快递单的条形码_根据快递单的条码图片识别单号
  10. RoaringBitmap
  11. PS简单打造照片非主流黑白色头像
  12. vue引入重写样式修改Element-UI表格背景色以及悬浮背景色,带操作的表格也可以修改呦~
  13. 二分查找板子(check()函数)
  14. 微信公众号python_wechat: 微信 Python SDK,支持微信公众号以及企业号的上行消息及 OAuth 接口...
  15. matlab中webcam,MATLAB编程-MATLAB2014a的webcam操作
  16. 各大搜索引擎之间转换,搜索引擎集合,新站登陆搜索引擎
  17. java计算机毕业设计国产精品动漫网站源码+mysql数据库+系统+lw文档+部署
  18. 远程连接Linux服务器并实现文件的上传下载
  19. Simulink|电动汽车、永磁电动机建模与仿真
  20. 信息化成熟度模型评估标准_领域评估第二部分-标准化之路

热门文章

  1. 拒绝访问(Access Denied)错误的快捷诊断方法
  2. 「知识蒸馏」最新2022研究综述
  3. 刚刚,2021 ACM Fellow放榜!李飞飞、谢涛、刘铁岩等13名华人学者当选
  4. 一些NER的英文数据集
  5. 每日算法系列【LeetCode 1031】两个非重叠子数组的最大和
  6. Linux基础—3.Linux基础命令总结【有图有真相】
  7. 深度学习14-实战三-Google涂鸦识别挑战项目(上)
  8. torch -index_select()、Pytorch 之修改Tensor部分值、pytorch中Tensor的数据类型
  9. linux---拷贝文件夹命令
  10. 图论算法——加权无向图的数据结构