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

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

教材学习内容总结

异常:是控制流中的突变,一部分由硬件实现,一部分由操作系统实现,用来响应处理器状态中的某些变化。

异常的类别:

中断:是一步发生的,是来自处理器外部的I/O设备的信号的结果。

陷阱:是有意的异常,是执行一条指令的结果。

故障:由错误情况引起,可以被故障处理程修正。

终止:是不可修复的致命错误导致的。

系统中的每个程序都运行在某个进程的上下文中

父进程通过调用fork函数来创建一个新的运行的子进程

fork函数调用一次返回两次。一次是返回到父进程,另一次是返回到新创建的子进程,父进程和子进程是并发执行的。

几个抽象:

逻辑控制流:提供一个假象,好像我们的程序独占地使用处理器

私有的地址空间:提供一个假象,好像我们的程序独占地使用内存系统

进程控制:

回收子进程

当一个进程由于某种原因终止时,进程被保持在一种已终止的状态中,直到被它的父进程回收。

一个进程调用waitpid函数等待它的子进程终止或停止

`#include <sys/types.h>

include <wait.h>

pid_t waitpid(pid_t pid,int *statusp,int options);`

运行程序

execve函数在当前进程的上下文中加载并运行一个新程序

课上测试补做

实现ls

打开目录文件

针对目录文件

读取目录条目

显示文件名

关闭文件目录文件

#include        <stdio.h>
#include        <sys/types.h>
#include        <dirent.h>

void do_ls(char []);

int main(int argc, char *argv[])
{
        if ( argc == 1 )
                do_ls( "." );
        else
                while ( --argc ){
                        printf("%s:\n", *++argv );
                        do_ls( *argv );
                }

        return 0;
}

void do_ls( char dirname[] )
{
        DIR             *dir_ptr;
        struct dirent   *direntp;

        if ( ( dir_ptr = opendir( dirname ) ) == NULL )
                fprintf(stderr,"ls1: cannot open %s\n", dirname);
        else
        {
                while ( ( direntp = readdir( dir_ptr ) ) != NULL )
                        printf("%s\n", direntp->d_name );
                closedir(dir_ptr);
        }
}
~           

posted @ 2018-11-11 20:41  165219wyb  阅读(148)  评论(0编辑  收藏  举报