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

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

课堂实践项目——myod第二版(系统功能调用)

任务要求

1 参考教材第十章内容

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

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

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

5 提交测试代码和运行结果截图, 提交调试过程截图,要全屏,包含自己的学号信息

6 课上上传代码到码云

码云链接-od-system

解决过程

上周就做过myod的程序,这次只用把打开文件,读取文件,关闭文件的命令全部换成系统命令即可,并不困难。

  • FILE *file=fopen(argv[3],"r")——int fd=open(argv[3],O_RDONLY,0);;
  • fgets(ch,17,file)——read(fd,&ch,BUFFERSIZE)
  • fclose(file)——改为close(fd);
#include<stdio.h>
#include<unistd.h>
void myod(int fd,int n1,int n2,int n3,int n4)
{
    char ch,line[16];
    int i;
    int a=0;
    int j=0;
    while(read(fd,&ch,1)!=0){
        line[j%16]=ch;
	if((j+1)%16==0){
        printf("%07o  ",16*a);
a++;
        if(n1){for(i=0;i<16;i++)
        {
            if(line[i]=='\n')
            {printf("%5s","\\n");continue;}
	    if(line[i]=='\t')
            {printf("%5s","\\t");continue;}
            putchar(line[i]);
            putchar(' ');
            putchar(' ');
            putchar(' ');
            putchar(' ');
        }
        putchar('\n');}
        if(n2){printf("         ");for(i=0;i<16;i++)
        {
            
            if(line[i]=='\n')
            {printf("0%-4x",'\n');continue;}
	    if(line[i]=='\t')
            {printf("0%-4x",'\t');continue;}
            printf("%-5x",line[i]);
        }
        putchar('\n');
        }

        if(n3){printf("        ");for(i=0;i<16;i++)
        {

            if(line[i]=='\n')
            {printf("%-5d",'\n');continue;}
	    if(line[i]=='\t')
            {printf("%-5d",'\t');continue;}
            printf("%-5d",line[i]);
        }
        putchar('\n');
        }
        if(n4){printf("       ");for(i=0;i<16;i++)
        {
            if(line[i]=='\n')
            {printf("%-5o",'\n');continue;}
	    if(line[i]=='\t')
            {printf("%-5o",'\t');continue;}
            printf("%-5o",line[i]);
        }
        putchar('\n');
        }
	}
	j++;

    }
}

学习两条重要命令

man -k head | grep file| grep 2
grep -nr O_RDONLY /usr/include

myhead/mytail码云链接

https://gitee.com/bestiisjava2017/laura5332/commit/6f2c00fa96b049cec64548a97c6150a6b6e828d2

完成head,tail的使用


自己实现

  • head命令是打印一个文件的前十行内容
  • tail命令是打印一个文件的后十行内容
  • 实现时,先打开一个文件,再用读取文件内容。
  • head从前往后,读10个换行符,结束,然后输出每行的内容
  • tail从后往前,读取10个换行符,结束,然后输出每行的内容
  • 关闭文件
    myhead

mytail

posted @ 2017-10-15 22:49  besti5332  阅读(257)  评论(3编辑  收藏  举报