2017-2018-1 20155320 《信息安全系统设计基础》第四周学习总结(课堂实践补交+myhead与mytail加分项目)
2017-2018-1 20155320 《信息安全系统设计基础》第四周学习总结(课堂实践补交+myhead与mytail实现)
课堂实践内容
1 参考教材第十章内容
2 用Linux IO相关系统调用编写myod.c 用myod XXX实现Linux下od -tx -tc XXX的功能,注意XXX是文件名,通过命令行传入,不要让用户输入文件名
不要把代码都写入main函数中
要分模块,不要把代码都写入一个.c中
5 提交测试代码和运行结果截图, 提交调试过程截图,要全屏,包含自己的学号信息
6 课上上传代码到码云
实现修改过程
1.我首先学会使用man
命令,可通过man -k key1| grep key2| grep key3| ...
实现多关键字查找,然后通过man 数字 key
找到具体的应用手册内容,我通过输入如下:
找到了read
函数的头文件为#include<unistd.h>
及所需传的参数,ssize_t read(int fd,void *buf,size_t n)
,它的返回值是成功则返回读的字节数,EOF则为0。
同理可查到函数open()的使用方法。
2.命令行传参,main函数的两个参数:
- argc记录了用户在运行程序的命令行中输入的参数的个数。
- arg[]指向的数组中至少有一个字符指针,即arg[0].它通常指向程序中的可执行文件的文件名。
3.修改第二周编写的myod函数后如下:
代码链接
4.运行结果为:
head、tail命令的实现
- 首先弄明白head和tail命令的功能,它是用来显示开头或结尾某个数量的文字区块,head 用来显示档案的开头至标准输出中,而 tail 是档案的结尾
head [参数] [文件]
,默认head命令打印其相应文件的开头10行
- 首先弄明白head和tail命令的功能,它是用来显示开头或结尾某个数量的文字区块,head 用来显示档案的开头至标准输出中,而 tail 是档案的结尾
- 命令参数
-q 隐藏文件名
-v 显示文件名
-c 显示字节数
-n 显示的行数
3.伪代码:
- 打开并读入成一个数组
- 选择是tail还是head
- 编写myhead,mytail利用循环输出默认10行,完成基本功能
产品代码
head.c
#include "head.h"
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
int main(int argc ,char *argv[]){
int fd;
int len;
int arg;
int flags;
flags=argc;
//if(argc==5){
//arg=(int)argv[3]-48;
//}
//else{
arg=10;
//}
char STR[10000],filename[100];
fd=open(argv[flags-1],O_RDONLY,0);
if(fd==-1){
//printf("Fail to open the file");
perror(argv[flags-1]);
exit(1);
}
len=read(fd,&STR,10000);
if(strcmp(argv[1],"head")==0){
if(argc==3){
// if(strcmp(argv[2],"-n")==0){
myhead(STR,len,arg);
//}
}
//else myhead(STR,len,arg);
}
if(strcmp(argv[1],"tail")==0){
if(argc==3){
mytail(STR,len,arg);
}
}
close(fd);
}
myhead.c
#include "head.h"
#include<stdio.h>
#include<stdlib.h>
void myhead(char STR[],int len,int arg){
int i,n;
for(i=0,n=0;i<len,n<arg;i++){
if(STR[i]=='\n'){
n++;
printf("\n");
}
else{
printf("%c",STR[i]);
// putchar(STR[i]);
}
}
}
head.h
#ifndef HEAD_H
#define HEAD_H
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void myhead(char STR[],int len,int arg);
void mytail(char STR[],int len,int arg);
#endif
- head的代码,运行结果为:
编程中遇到的问题
- 问题1:在编写中遇到了如下情况:
- 解决1:通过检查我发现,我在head.h中和对myhead.h中参数类型的定义有一个是不一致的
修改后出现了错误2
- 问题2:显示找不到路径和文件
- 解决2:我通过单步调试发现根本进入不了这个文件,发现在调用参数时,文件名不是argv[1],改为argv[3]后可以进入目标文件了
- 问题3:运行不出任何结果,编译也未出现任何错误。
- 解决3:发现我犯了一个低级错误,虽然我注意到字符串的比较不能用,必须要用strmp()0才能保证进入。
代码托管
mytail实现
- 学习mytail的功能
其功能是将文件的后10行打印到标准输出
mytail的实现与myhead非常类似,只需加一个mytail.c就够了,在此就不详细叙述了
#include "head.h"
#include<stdio.h>
#include<stdlib.h>
void mytail(char STR[],int len,int arg){
int i,n;
int count;
int k,j;
for(count=0,k=0;k<len;count++,k++){
if(STR[i]=='\n'){
count++;
}
}
for(n=0,i=0;i<len;i++){
if(STR[i]=='\n'){
n++;
}
if(n==count-10){
for(k=i+1;k<len;k++){
if(STR[k]=='\n'){
n++;
printf("\n");
}
else{
printf("%c",STR[k]);
}
}
}
}
}
- 实现结果
总结感悟
感觉以前java要求掌握的一些知识,像命令行参数传入等还需要巩固。而且许多知识感觉仍然需要时间,虽然最近学习的过程比较辛苦,但是感觉收获还是不错的。
2017-2018-1 20155320 《信息安全系统设计基础》第四周学习总结(课堂实践补交+myhead与mytail加分项目)的更多相关文章
- 2017-2018-1 20155318 《信息安全系统设计基础》第2周课堂实践、makefile、以及myod
2017-2018-1 20155318 <信息安全系统设计基础>第2周课堂实践.makefile.以及myod 测试3-gdb测试 用gcc -g编译vi输入的代码 在main函数中设置 ...
- 20135328信息安全系统设计基础第一周学习总结(Linux应用)
学习计时:共xxx小时 读书: 代码: 作业: 博客: 一.学习目标 1. 能够独立安装Linux操作系统 2. 能够熟练使用Linux系统的基本命令 3. 熟练使用Linux中用户管理命令/ ...
- 20135328信息安全系统设计基础第二周学习总结(vim、gcc、gdb)
第三周学习笔记 学习计时:共8小时 读书:1 代码:5 作业:1 博客:7 一.学习目标 熟悉Linux系统下的开发环境 熟悉vi的基本操作 熟悉gcc编译器的基本原理 熟练使用gcc编译器的常用选项 ...
- 2017-2018-1 20155232 《信息安全系统设计基础》第十周课堂测试(ch06)补交
# 2017-2018-1 20155232 <信息安全系统设计基础>第十周课堂测试(ch06)补交 上课时完成测试后在提交的时候,没有提交成功,进行补交. 1.下面代码中,对数组x填充后 ...
- 2017-2018-1 20155318 《信息安全系统设计基础》第九周课下实践——实现mypwd
2017-2018-1 20155318 <信息安全系统设计基础>第九周课下实践--实现mypwd 相关知识 man -k 查找含有关键字的内容 与管道命令结合使用:man -k k1 | ...
- 2017-2018-1 20155330 《信息安全系统设计基础》第10周课堂测试&课下作业
2017-2018-1 20155330 <信息安全系统设计基础>第10周课堂测试&课下作业 stat命令的实现-mysate 学习使用stat(1),并用C语言实现 提交学习st ...
- LINUX信息安全系统设计基础第一周学习总结
Linux系统简介 一.实验内容 了解 Linux 的历史,Linux 与 Windows 的区别等入门知识. 二.实验要求 阅读linux简介与历史 三.实验步骤 二.Linux 与 Window ...
- LINUX信息安全系统设计基础第二周学习总结
1 Linux命令 2 man命令 1.Terminal(终端) Linux 系统还提供了一个叫做终端模拟器的程序(Terminal),下面几个比较常见的终端模拟器,例如 gnome-terminal ...
- 20145213《信息安全系统设计基础》实验一 Linux开发环境的配置
北京电子科技学院(BESTI) 实 验 报 告 课程:信息安全系统设计基础 班级:1452 姓名: 黄亚奇 祁玮 学号:20145213 20145222 成绩: 指导教师:娄嘉鹏 实验日期:2016 ...
随机推荐
- pip install lxml mysql-python error
问题0: 在安装 mysql-python时,会出现: sh: mysql_config: not found Traceback (most recent call last): File &quo ...
- PhoneGap 加速计 api 获取加速计 x 轴 y 轴 z 轴信息
一.PhoneGap 加速计 Accelerometer 对象介绍 1.主要方法 accelerometer.getCurrentAcceleration 获取当前设备在 x,y,z 轴上的加速度信息 ...
- POJ-3662 Telephone Lines---二分+最短路+最小化第k+1大
题目链接: https://cn.vjudge.net/problem/POJ-3662 题目大意: 求一条路径从1到n使第k+1大的边最小. 解题思路: 二分答案mid,当原边权小于等于mid新边权 ...
- 【金融123】CNY和CNH的差异和关联
https://www.sohu.com/a/117406459_473263 离岸人民币(CNH)与在岸人民币(CNY) 差异: CNY CNH 法律监管限制 在岸人民币受大陆市场的管制,外汇和 ...
- TCP连接三次握手协议,释放连接四次挥手,以及使用 awl伪造mac地址进行多线程syn洪泛攻击。
这个TCP连接就是一次追女生-谈恋爱-分手,追求比分手简单,但是分手比追求复杂.哥,谈了半年的女朋友,在就快要成功了的时候分了,原因是因为有人在后面该老子背后搞SYN洪泛攻击,最后女朋友丢失了.学会T ...
- Android 配置文件 AndroidManifest 解析
1.屏幕分辨率 <supports-screens android:smallScreens="true" android:normalScreens="true& ...
- HDU 1004 Let the Balloon Rise(map的使用)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1004 Let the Balloon Rise Time Limit: 2000/1000 MS (J ...
- kafka restful api功能介绍与使用
前述 采用confluent kafka-rest proxy实现kafka restful service时候(具体参考上一篇笔记),通过http协议数据传输,需要注意的是采用了base64编码(或 ...
- 安装Win7时删除系统保留的100M隐藏分区
原创文章,作者:lenbs,如若转载,请注明出处:https://www.smbinn.com/delwindows7100m.html 安装windows7新建磁盘分区时系统会自动创建100M的保留 ...
- 项目中常用的MySQL优化方法--壹拾玖条
1.EXPLAIN 做MySQL优化,我们要善用EXPLAIN查看SQL执行计划. 下面来个简单的示例,标注(1.2.3.4.5)我们要重点关注的数据: type列,连接类型.一个好的SQL语句至少要 ...