2017-2018-1 20155230 《信息安全系统设计基础》第四周课堂实验

2017-2018-1 20155230 《信息安全系统设计基础》第四周课堂实验

补充完成课上没有完成的内容(2分)

1071497-20171013111508934-825929602.png

在课上学习时对于调用命令行参数的使用并不熟悉,加上之前的MYOD实现我使用的是程序运行后输入文件区别较大所以没能按时改完代码。要调用命令行参数需要在main()的括号中添加一个整形和字符形分别 表示命令行参数的个数和存储字符参数的指针数组即:int main(int argc,char *argv[])
在课下的代码补全中,输出的字符无法像Linux下od命令一样输出"\n"也无法正常输出其16进制格式,于是在代码中另加了if判定使其能够正确输出,百度之后了解可使用printf("\\n")输出"\n"。

学习教材附录A,第十章内容

O_RDONLY:只读

O_WRONLY:只写

O_RDWR:可读可写

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

man -k key1 | grep key2| grep 2 : 根据关键字检索系统调用,key1指功能,key2指条件。例如man -k read | grep 2表示搜索二进制的读取功能代码。
grep -nr XXX /usr/include :查找宏定义,类型定义,用于查看.h头文件。

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

  • head和tail分别用于查看文件内容的前或后几行。例如head/tail -2 123.txt表示查看123.txt文件的前/后两行。
int main()
{
    打开文件;
    将字符形的条件数字转为整形;
    for(条件行数)
    {
    do
        {
            依次读取文件中的字符;
            输出字符;       
        }while(读到回车或读完)
    }
    关闭文件
}

以下是head命令的产品代码,因为行数较短且运行结果是否有错能一眼看出,所以没有另外编写测试代码。

#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);
        }while(ch!='\n'&&ch!=EOF);
    }
    fclose(fp);
}

1071497-20171013123100684-67440349.png

1071497-20171013115357027-384794946.png

int main()
{
    循环读取回车符
    将字符形的条件数字转为整形;
     do{
            依次读取字符,读到j=总回车符-条件后开始输出读取字符。
    }while(读完)
}

在编写tail时因为不知道文件具体有多少行,所以需要对文件的行数做一个了解,所以第一次读取文件用于查找回车符个数。第二次打开文件针对找到的条件,输出后几行。

#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 len;
    char ch;
    len=atoi(argv[1]);
    int m=0;
    do{
        ch=fgetc(fp);
        if(ch=='\n')
            m++;
    }while(ch!=EOF);
    fclose(fp);

    int i=0;
    FILE *fp2=fopen(argv[2],"r");
    for(i;i<m;)
    {
        ch=fgetc(fp2);
        if(i>=m-len)
        {
            putchar(ch);
        }
        if(ch=='\n')
            i++;
    }
    fclose(fp2);
    return 0;
}

1071497-20171013133149105-1796927856.png
1071497-20171013115414652-2052483573.png

发表相关内容的学习博客(课堂上完成实践内容的可以选做),博客标题“2017-2018-1 学号 《信息安全系统设计基础》第四周学习总结”,博客(随笔)要通过作业提交,截至时间 本周日 23:59。

代码链接

转载于:https://www.cnblogs.com/J1n233/p/7660125.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值