20145311 《信息安全系统设计基础》第十周学习总结
代码调试中的问题和解决过程
cp
类似于cp的cp1命令,用来复制文件或目录
cp的关键步骤:
打开源文件
创建目标文件
把源文件读入缓冲区
把缓冲区内容写入目标文件
关闭源文件和目标文件
此外,代码中还包含了一些错误的提示,例如打开错误,创建错误,用法错误等
setecho & echostate
下图为设置echo为no之后键盘的输入不显示,但依然可以执行命令
当echo为no是 echostate显示为关闭状态
代码分析#include <stdio.h>
#include <stdlib.h>
#include <termios.h>
#define oops(s,x) { perror(s); exit(x); }
int main(int argc, char *argv[])
{
struct termios info;
if (argc == 1) //后面没有带参数的话就不做任何操作,退出
exit(0);
if (tcgetattr(0,&info)==-1)//tcgetattr函数用于获取与终端相关的参数。参数fd为终端的文件描述符,返回的结果保存在termios 结构体中,这里fd为0,是标准输入。这句用于读取设备属性
oops("tcgettattr", 1);
if ( argv[1][0] == ‘y‘ )//如果运行命令后面的参数第一个字母是“y”,执行“设置打开提示符”的命令
info.c_lflag |= ECHO ;/*打开提示符*/
else//对其它所有的参数都执行“设置隐藏提示符”的命令
info.c_lflag &= ~ECHO ;/*隐藏提示符*/
if ( tcsetattr(0,TCSANOW,&info) == -1 )//将修改后的参数写回设备
oops("tcsetattr",2);
return 0;
}
fileinfo & filesize
fileinfo的功能与ls -l的功能类似,可以显示文件的具体信息
mode:st_mode 文件的类型和存取的权限
links:st_nlink 连到该文件的硬链接数目,刚建立的文件值为1
user:st_uid 用户ID
group:st_gid 组ID
size:st_size 文件字节数
modtime:st_mtime 最后一次修改时间
name: 输入的文件名
下图为一些用户权限的数字表示
filesize显示的文件的大小,但是它默认的是/etc/passwd的大小,应该是可以改路径的
ls
感觉这两个ls的功能远不及系统级ls,代码中好像是利用dir来实现功能的
还是系统的ls功能多
ls -l:显示文件信息
ls -a:列出文件目录
ls -lu:最后访问时间
ls -s:以块为单位的文件大小
ls -t:按时间排序
ls -F:显示文件类型
spwd
显示当前目录,我在共享文件夹中试了一下有错误,换了个文件夹就可以了
testioctl
获得终端设备的窗口大小,两个不同的终端大小
who
两个代码运行结果类似,都是通过读取utmp文件来显示用户信息
本周代码托管
将源代码都放到了src文件夹中,重新git了一下
其他(感悟、思考等,可选)
本周的学习内容主要是一些系统级调用,这些代码有的感觉没有系统级调用那么强大的功能,所以还需要不断地完善
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | |
---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 |
第一周 | 100/100 | 1/2 | 10/10 |
第二周 | 150/200 | 2/4 | 8/18 |
第三周 | 200/250 | 1/5 | 5/23 |
第五周 | 50/300 | 1/6 | 9/32 |
第六周 | 20/320 | 1/7 | 8/40 |
第七周 | 20/340 | 1/8 | 6/46 |
第八周 | 60/400 | 2/10 | 6/52 |
第九周 | 80/480 | 1/11 | 8/60 |
第十周 | 60/540 | 2/13 | 6/66 |
参考资料
时间: 2024-10-12 16:10:35