1. 程式人生 > >2018-2019-1 20165219 《資訊安全系統設計基礎》第七週學習總結

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);
        }
}
~