zoukankan      html  css  js  c++  java
  • 2017-2018-1 20155204 《信息安全系统设计基础》第四周课堂实践总结

    2017-2018-1 20155204 《信息安全系统设计基础》第四周课堂实践总结

    补充课上没有完成的内容

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

    (1) 首先利用man命令学习一下我们要调用的函数open read

    (2) 编写代码实现:

    参考别出心裁的Linux系统调用学习法学习视频,掌握两个重要命令

    1. man -k key1 | grep key2| grep 2 : 根据关键字检索系统调用
    2. grep -nr XXX /usr/include 查找宏定义,类型定义

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

    1.head

    (1)分析:输出文件前*行的内容。

    (2)伪代码:

    int main(传入文件信息){
        打开文件
        输出文件长度转为数字
        for(循环到文件尾){
            do{
                输出文件内容
                有换行则跳出
            }while(文件结束)
        }
        关闭文件
    }
    

    (3)产品代码:

    #include <stdio.h>
    #include <fcntl.h>
    #include <unistd.h>
    #include <stdlib.h>
    #include <string.h>
    int main(int argc,char*argv[])
    {
    	FILE *fp=fopen(argv[2],"r");
    	int i,j;
    	char ch;
    	j=atoi(argv[1]);
    	for(i=0;i<j;i++)
    	{
    		do{	ch=fgetc(fp);
    			putchar(ch); 
                            if(ch == '
    ') break;
    		}while(ch!=EOF);
    		
    	}
    	fclose(fp);
    }
    
    

    (4)测试:

    2.tail

    (1)分析:输出文件后*行

    (2)伪代码:

    int main(文件信息){
        打开文件
        i=line(文件)
        再次打开文件
        while(文件结束){
            if(有空格)  计数;
            if(到了开始输出的行){
                while(文件结束){
                    输出文件内容
                }
            }
        }
    }
    int line(文件){
        while(文件结束){
            计数文件行数
        }
        关闭文件
        放回文件行数
    }
    

    (3)产品代码:

    #include <stdio.h>
    #include <fcntl.h>
    #include <unistd.h>
    #include <stdlib.h>
    #include <string.h>
    int line(FILE *fp);
    void main(int argc,char *argv[]){
    	char ch;
    	int i,j=0,m;	
    	FILE *fp=fopen(argv[2],"r");
    	i=line(fp);
    	fp=fopen(argv[2],"r");
    	m=atoi(argv[1]);
    	while(ch!=EOF){
    	ch=fgetc(fp);
    	if(ch=='
    ')	j++;
    	if(j==i-m){
    		while(ch!=EOF){
    			ch=fgetc(fp);
    			putchar(ch);
    			}	
    	}	
    	
    	}
    	fclose(fp);
    }
    int line(FILE *fp){
    	char ch;
    	int i=0;
    	while(ch!=EOF){
    		ch=fgetc(fp);
    		if(ch=='
    ')	i++; 
    	}	
    fclose(fp);
    return i;
    	
    }
    

    (4)测试

    问题总结

    问题1:myod输出时最后会跟一个换行符

    解决1:在判断结束时多加了一个是否到换行符,消除了换行符的输出

    问题2:tail无法输出

    解决2:因为在输出文件前有一个统计行数的函数 line ,这个函数中文件已经读到了末尾,所以需要在这个函数中关闭文件,再回到主函数打开一次,这样就能从头读文件。

  • 相关阅读:
    Java中的泛型
    Java中List、Collections实现梭哈游戏
    Java中HashMap案例
    Java中ArrayDeque,栈与队列
    Java中List的使用
    学会使用JDK API
    Java中的数学运算BigDecimal
    在清华听演讲语录
    Java面向对象深度
    类变量、实参、形参、方法参数、代码块参数
  • 原文地址:https://www.cnblogs.com/20155204wh/p/7674917.html
Copyright © 2011-2022 走看看