zoukankan      html  css  js  c++  java
  • 2017-2018-1 20155328 《信息安全系统设计基础》第四周学习总结

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

    课堂提交补充

    用Linux IO相关系统调用编写myod.c 用myod XXX实现Linux下od -tx -tc XXX的功能(XXX为文件名,通过命令行传入。)

    在之前的myod基础上,使用了系统调用的open和read函数。使用前查询如下:

    更改main.c的代码如下:

    #include<stdio.h>
    #include<sys/types.h>
    #include<sys/stat.h>
    #include<fcntl.h>
    #include"head.h"
    #define N 300
    main(int argc,char *argv[])
    {
        char a[N];
        int i,fd,n;
        if ( (fd = open(argv[3], O_RDONLY)) == -1 )
            {
                    perror(argv[3]);
                    exit(1);
            }
        n=read(fd, a, N);
        myod(a,n);
        close(fd);
    }
    

    myod.c的代码如下:

    #include<stdio.h>
    #include"head.h"
    void myod(char *a,int n)
    {
        int i,j;
        char b[16];
        for(i=0;i<n;i++){
            if(i%16==0) printf("%07o	",16*i);
            printf("%c ",a[i]);
            if((i%16==15)||(i==n-1)){
                printf("
    ");
                for(j=0;j<16;j++)
                {
                    b[j]=a[i-15+j];
                    printf("%x ",b[j]);
                }
                printf("
    ");
            }
        }
    }
    

    运行myod截图如下:

    • 遇到的问题1:在Linux中运行时提示“段错误(核心已转储)”。

    • 解决方法:询问遇到过这个问题的同学,同学说她的问题是因为数组越界才提示段错误,仔细检查程序后发现并未出现越界问题。后去百度,发现是自己在linux中运行时忘了带参数...

    • 遇到的问题2:运行程序后没有显示输出。

    • 解决方法:查看myod.c的输出部分,发现自己将后引号打到了b[j]后面...修改后输出正常。

    head和tail的相关使用

    在Linux中,head+文件名的功能为打印出文件的前十行,tail+文件名的功能为打印出文件的后十行。在终端试了一下这两个命令,效果如图:

    编写代码如下:

    main.c:

    #include <stdio.h>
    #include <stdlib.h>
    #include<sys/types.h>
    #include<sys/stat.h>
    #include<fcntl.h>
    #include"head.h"
    #define N 300
    main(int argc,char *argv[])
    {
        char ch[N];
        int i,fd,n;
        if ( (fd = open(argv[1], O_RDONLY)) == -1 )
            {
                    perror(argv[1]);
                    exit(1);
            }
        n=read(fd,ch,N);
        ihead(ch,n);
        close(fd);
    }
    

    ihead.c:

    #include <stdio.h>
    #include"head.h"
    ihead(char *ch[],int n)
    {
        int i,count=0;
        for(i=0;i<n,count<10;i++)
        {
            if (ch[i]!='
    ') printf("%c",ch[i]);
            else
                {
                    count++;
                    printf("
    ");
                }
        }
    }
    

    码云链接:20155328张钰清

  • 相关阅读:
    Python3简单的输入输出及内置函数查看
    Python绘制3d螺旋曲线图实例代码
    教女朋友学Python运行环境搭建
    初级模拟电路:3-4 共基放大电路(直流分析)
    初级模拟电路:3-3 共基组态
    初级模拟电路:3-2 BJT的工作原理
    初级模拟电路:3-1 BJT概述
    初级模拟电路:2-6 倍压电路
    初级模拟电路:2-5 钳位器
    初级模拟电路:2-4 限幅器
  • 原文地址:https://www.cnblogs.com/zyqzyq/p/7670754.html
Copyright © 2011-2022 走看看