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

教材学习

  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。
  9. read、write函数执行输入和输出。


    ssize_t & size_t:size_t型输入为无符号长整型,ssize_t型返回值为有符号长整型,因为考虑到出错时许返回-1。

教材实践

有关函数使用

  • getpid

    每个进程都有唯一的正数进程ID(PID)。查看帮助文档如下图所示:

    getpid函数返回调用进程的PID,getppid函数返回它的父进程的PID。
  • fork

    man 2 fork 命令查看其帮助文档,如下图所示:

    即创建一个子进程,需要包含的头文件是#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)

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

    • waitpid

      man 2 waitpid 命令查看其帮助文档,如下图所示:

      "wait for process to change state"等待一个进程去改变当前状态。需要包含的头文件是:#include <sys/types.h>;#include <sys/wait.h>。

      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参数指定的子状态已更改。
      试运行代码如下:
        
  • sleep

    将一个进程挂起一段指定的时间。如果请求的时间量已经到了,sleep返回0,否则返回还剩下的要休眠的秒数。
  • execve

    在当前进程的上下文中加载并运行一个新的程序。如果成功则不返回,如果错误则返回-1。
  • exit

    man 2 exit查看帮助文档后,如下图所示:

    terminate the calling process终止当前唤起的进程。包含的头文件是:#include <unistd.h>.且这个系统调用没有返回值。

其他

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

参考资料

posted @ 2020-10-30 20:28  下饭东giao~  阅读(46)  评论(0编辑  收藏  举报