2018-2019-1 20165208 《信息安全系统设计基础》第七️周学习总结

2018-2019-1 20165208 《信息安全系统设计基础》第七️周学习总结

教材学习

  1. man -k key1 | grep key2| grep 2 : 根据关键字检索系统调用

    grep -nr XXX /usr/include :查找宏定义,类型定义
  2. 异常可以分为四类:中断、陷阱、故障和终止。
    image
  3. syscalls n指令允许用户对内核服务受控访问,即用户请求服务n。执行syscalls会导致异常处理程序的陷阱。
  4. 函数和系统调用本质上都是函数。不同的是,系统调用运行在内核模式中,普通函数调用运行在用户模式中。
  5. 进程总是处于下面三种状态之一:运行、停止、终止。
  6. 将设备优雅的映射为文件:打开文件、改变当前的文件位置、读写文件、关闭文件。
  7. linux文件三种表现类:普通文件(包括文本文件和二进制文件)、目录、套接字。
  8. open函数:用来打开一个已存在的文件或创建新文件。若成功则返回新文件描述符,出错返回-1。
    image
  9. read、write函数执行输入和输出。
    image
    image
    ssize_t & size_t:size_t型输入为无符号长整型,ssize_t型返回值为有符号长整型,因为考虑到出错时许返回-1。

教材实践

有关函数使用

  • getpid

    每个进程都有唯一的正数进程ID(PID)。查看帮助文档如下图所示:
    image
    getpid函数返回调用进程的PID,getppid函数返回它的父进程的PID。
  • fork

    man 2 fork 命令查看其帮助文档,如下图所示:
    image
    即创建一个子进程,需要包含的头文件是#include <unistd.h>。
    image
    在父亲进程中其返回值时子进程的PID,在子进程中其PID是0。
    image
    它还与下列函数有关:clone(2), execve(2), exit(2), setrlimit(2), unshare(2),
    vfork(2), wait(2), daemon(3), capabilities(7), creden‐
    tials(7)

    试运行老师的代码效果如下:
    image
    image
    image
    image
    image
  • waitpid

    man 2 waitpid 命令查看其帮助文档,如下图所示:
    image
    "wait for process to change state"等待一个进程去改变当前状态。需要包含的头文件是:#include <sys/types.h>;#include <sys/wait.h>。
    image
    wait()返回终止子进程的PID,出错时返回-1;waitpid()返回状态改变的子进程的PID,出错时同样返回-1。
    image
    它们还和下列函数有关: _exit(2), clone(2), kill(2), ptrace(2), sigaction(2), signal(2),
    wait4(2), pthread_create(3), credentials(7), signal(7)

    wait()和waitpid()的用法有所不同。wait()挂起调用进程直到有一其子女运行终止;waitpid()挂起调用进程执行直到由PID参数指定的子状态已更改。
    试运行代码如下:
    image
  • sleep
    image
    将一个进程挂起一段指定的时间。如果请求的时间量已经到了,sleep返回0,否则返回还剩下的要休眠的秒数。
  • execve
    image
    在当前进程的上下文中加载并运行一个新的程序。如果成功则不返回,如果错误则返回-1。
  • exit

    man 2 exit查看帮助文档后,如下图所示:
    image
    terminate the calling process终止当前唤起的进程。包含的头文件是:#include <unistd.h>.且这个系统调用没有返回值。

课上实践

  1. 参考伪代码实现ls的功能,提交代码的编译,运行结果截图,码云代码链接。
  • 伪代码如下:

    打开目录文件

    针对目录文件

    读取目录条目

    显示文件名

    关闭文件目录文件
  • 实验效果图
    image
  • 代码托管

其他(感悟、思考等,可选)

这两章学了很多新函数,越发感受到了man 命令的方便,感觉有时候写代码还是很困难,但对于C语言实现linux命令大概有个框架了。

参考资料

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 20篇 400小时
第三周 432/432 2/2 11/11
第四周 549/549 1/3 8/8
第五周 692/692 1/4 9/9
第六周 776/776 2/6 13/13
第七周 902/902 1/7 15/15
posted @ 2018-11-09 09:50  KY-high  阅读(189)  评论(0编辑  收藏  举报