20145208 《信息安全系统设计基础》第十周学习总结
20145208 《信息安全系统设计基础》第十周学习总结
视频学习
-
目录文件永远不会为空,每个目录至少包含两个特殊项
.
和..
,其中.
表示当前目录,..
表示上一级目录。 -
相关系统调用:
man -k
:将列出整个man page中和“所查找单词”相关的内容,是一种模糊查找。grep -nr XXX /usr/include
:查找宏定义,类型定义。
-
以
ls -l
为例:可以显示当前目录下目录或文件的详细属性信息
man 1 ls
查看一下ls指令解释
代码调试
代码cp1.c
- 进行复制文件的操作,需要有源文件和目的文件,第一次命令没有加入所以没有正常完成复制文件的操作
- cp帮助文档
代码fileinfo.c
- 用来实现显示文件信息。先判断命令是否有操作数,有的话才能继续进行下去,如果没有报错就打印出来相关文件信息,报错就用perror将报错信息打印出来。
- 同样需要输入要查看的文件才会有信息打印出来
- 查看stat函数的帮助文档:
- 各宏变量的意义:
- mode:st_mode 文件的类型和存取的权限
- links:st_nlink 连到该文件的硬链接数目,刚建立的文件值为1
- user:st_uid 用户ID
- group:st_gid 组ID
- size:st_size 文件字节数
- modtime:st_mtime 最后一次修改时间
代码filesize.c
- 原本的代码是指定查找
etc/passwd
文件的大小,所以后面输入什么文件名都是一样的大小
-
代码中文件路径如下,
star()
函数前面的参数是文件路径,后面是存入缓存的名称:
stat( "/etc/passwd", &infobuf)
-
为了测试我的猜测,我修改路径为
cp1.c
的地址,结果如下:
- 可以看到测试结果和实际大小相同,所以只要把文件名设为键入赋值的就可以了
- 把代码修改如下:
#include <stdio.h>
#include <sys/stat.h>
#include <stdlib.h> //exit()
int main(int argc, char * argv[])
{
struct stat infobuf;
char *filename;
if (argc != 2) {
printf("Please input filename\n");
exit(-1);
}
filename = argv[1];
if ( stat(filename, &infobuf) == -1 )
perror(filename);
else
printf(" The size of %s is %d\n",filename, infobuf.st_size );
}
- 再次编译运行得到想要的效果
代码ls1.c
- 简单的显示所在文件夹中的文件及文件夹列表
代码ls2.c
- 显示所在文件夹中的文件及文件夹详细信息的列表
代码setecho.c
- 可以改变符号显示状态,no是不显示符号,yes是显示
- 可以看到no指令后输入的命令看不见,状态值为0;yes指令后恢复可见,状值态为1.
代码echostate.c
- 用来检查命令行中的提示符是否显示的,如果显示,输入的命令都可见,不显示则表示输入的命令不可见
- tcgetattr:tcgetattr函数用于获取与终端相关的参数。参数fd为终端的文件描述符,返回的结果保存在termios结构体中
- tcsetattr:tcsetattr函数tcsetattr函数用于设置终端参数。
- perror:打印错误信息
- 此外,为了更好的理解函数返回值的过程,用grep命令查看了其中的几个宏变量:
- ECHO:显示输入字符,值为0000010
- c_lflag:本地模式标志,控制终端编辑功能
代码spwd.c
- 显示出所在目录
代码testioctl.c
- 计算当前命令行窗口的行列数大小
- 不同大小的变化如下:
- 查看isatty和ioctl函数的帮助文档:
- isatty:判断文件描述词是否是为终端机,如果参数所代表的文件描述词为一终端机则返回1,否则返回0。
- ioctl:是设备驱动程序中对设备的I/O通道进行管理的函数,其中d是用户程序打开设备时使用open函数返回的文件标示符,request是用户程序对设备的控制命令,至于后面的省略号,那是一些补充参数,一般最多一个,这个参数的有无和request的意义相关
代码who1.c
- 从UTMP_FILE文件中读取系统中用户信息
代码who2.c
- 此代码和who1.c相同……
代码托管
代码托管链接
代码行数截图
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 0/0 | 1/2 | 20/20 | 学会了虚拟机安装和Ubuntu的基本操作 |
第二周 | 56/56 | 1/3 | 20/40 | 学会了Ubuntu终端下的C语言编写 |
第三周 | 110/166 | 1/4 | 30/70 | 熟悉了gdb的基本操作,了解了计算机信息表示和处理 |
第四周 | 110/166 | 1/5 | 10/80 | 复习了前几周的知识 |
第五周 | 42/208 | 2/6 | 30/110 | 学习了linux下的汇编语言内容 |
第六周 | 447/655 | 1/7 | 30/140 | 了解了linux下Y86模拟器的使用 |
第七周 | 71/726 | 1/8 | 20/160 | 学习了局部性原理和缓存思想的应用 |
第八周 | 0/726 | 2/10 | 20/180 | 复习了之前的学习内容并总结 |
第九周 | 133/859 | 2/12 | 20/200 | 学习了系统级I/O的内容,了解了函数的内在 |
第十周 | 407/1266 | 1/13 | 30/230 | 对代码进行分析调试,又理解一些系统级的I/O内容 |
参考资料
posted on 2016-11-18 19:50 20145208蔡野 阅读(254) 评论(3) 编辑 收藏 举报