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

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

项目一:课堂提交补充

  1. 参考教材第十章内容

  2. 用Linux IO相关系统调用编写myod.c 用myod XXX实现Linux下od -tx -tc XXX的功能,注意XXX是文件名,通过命令行传入,不要让用户输入文件名

  3. 不要把代码都写入main函数中

  4. 要分模块,不要把代码都写入一个.c中

  • 过程(直接改动myod)
  1. 是将定义的*file改变成fd然后标准I/O函数里的fopen换成系统调用的open

  2. 是将标准中的读取下一字符的fgets改变成系统调用的读取整个长度字符的read

  3. 是将标准中的关闭文件的fclose改变成关闭文件描述符close
    查询了相应的man:

  • 运行截图:

项目二 学习教材第十章内容

  • 以读的方式打开一个已经存在的文件:fd=Open("foo.txt",O_RDONLY,0);

  • 打开一个已存在文件,并在后面添加一些数据:fd=Open("foo.txt",O_WDONLY|O_APPEND,0);

  • O_RDONLY:只读

  • O_WRONLY:只写

  • O_RDWR:可读可写

  • st_size成员包含了文件的字节数大小。st_mode成员则编码了文件访问许可位和文件类型。

  • Unix I/O模型是在操作系统内核中实现的。应用程序可以通过诸如open、close、lseek、read、write和stat这样的函数来访问Unix I/O。较高级别的RIO和标准I/O函数都是基于Unix I/O来实现的。

项目三 掌握两个重要命令:

  • man -k key1 | grep key2| grep 2 : 根据关键字检索系统调用

  • grep -nr XXX /usr/include :查找宏定义,类型定义

项目四 完成head,tail的使用,相关API的分析,伪代码,产品代码,测试代码的编写

  • head的使用是显示打开文件的前10行内容而tail的使用是显示打开文件的后10行内容

  • 虚拟机中的测试:

  • 伪代码:
  1. HEAD
打开文件
对传入参数进行筛选和转换,参数由字符串转换为整型l。
        依次读取文件中字符c;
        输出字符c;
        得到c为回车时, i++;
        关闭文件
  1. TAIL
先打开
通过函数lines得到文件行数
    对参数l的转换同head.c
        依次读取字符,读到回车即j++;
        读到j=lines-l时输出读取字符
        关闭
  • 产品代码
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
int main(int argc,char *argv[])
{
		
ssize_t read(int fd, void *buf, size_t count);
int  fd=open(argv[2],O_RDONLY,0);
		int l;
		int i;
		char ch;
		l=atoi(argv[1]);
		for(i=0;i<l;i++)
		{
				do
				{
						ch=read(fd,&ch,buf);
						putchar(ch);
				}while(ch!='\n'&&ch!=EOF);
		}
		close(fd);
              return 0;
}
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int lines()
{   
        ssize_t read(int fd, void *buf, size_t count);
		int i=0;
		char ch;
		do
		{
				ch=read(fd);
				if(ch=='\n')
						i++;
		}while(ch!=EOF);
		close(file);
		printf("%d\n",i);
		return i;
}

int main(int argc,char *argv[])
{
		FILE *fl=open(argv[2],"r");
		int len= lines(fd);
		int j=0;
		int l=atoi(argv[1]);
		char c;
		fl=open(argv[2],"r");
		while(j<len-l)
		{
				c=read(fd,&ch,buf);
				if(c=='\n') j++;
		}
		do
		{
				c=read(fd,&ch,buf);
				putchar(c);
		}while(c!=EOF);

		close(fd);
		return 0;

}
  • 截图

  • 问题

posted @ 2017-10-15 21:08  20155226田皓宇  阅读(170)  评论(2编辑  收藏  举报