2017-2018-1 20155308 《信息安全系統設計基礎》第十週課上+課下測試

2017-2018-1 20155308 《信息安全系統設計基礎》第十週課上+課下測試

程序運行

  1. 理解test.c, 說出程序功能
  2. 編譯運行程序,提交運行截圖
#include    <stdio.h>
#include    <stdlib.h>
#include    <fcntl.h>
main()
{
    int fd ;
    int newfd;
    char    line[100];
    fgets( line, 100, stdin ); printf("%s", line );
    fgets( line, 100, stdin ); printf("%s", line );
    fgets( line, 100, stdin ); printf("%s", line );
    fd = open("data", O_RDONLY);    
newfd = dup2(fd,0); 
if ( newfd != 0 ){
        fprintf(stderr,"Could not duplicate fd to 0\n");
        exit(1);
    }
    close(fd);          
fgets( line, 100, stdin ); printf("%s", line );
    fgets( line, 100, stdin ); printf("%s", line );
    fgets( line, 100, stdin ); printf("%s", line );
}
  • 程序功能爲:

一、首先採集三次用戶輸入並打印出來linux

二、以只讀的方式打開data文件,記爲fdgit

三、用newfd複製fd中的文件並打印用戶輸入,失敗,輸出「不能複製fd」shell

  • 編譯運行程序

stat命令的實現-mysate

學習使用stat(1),並用C語言實現安全

  1. 提交學習stat(1)的截圖
  2. man -k ,grep -r的使用
  3. 僞代碼
  4. 產品代碼 mystate.c,提交碼雲連接
  5. 測試代碼,mystat 與stat(1)對比,提交截圖
  • 利用 man命令學習stat(1),man 1 stat

  • man -k stat

  • 僞代碼:獲取stat結構體並打印服務器

  • 產品代碼碼雲連接網絡

https://gitee.com/haowenfei25/XinXiAnQuanXiTongSheJiJiChu20155308/blob/master/ketang/stat.c數據結構

  • mystat 與stat(1)對比

課下做業-IPC

研究Linux下IPC機制:原理,優缺點,每種機制至少給一個示例,提交研究博客的連接框架

  • 共享內存
  • 管道
  • FIFO
  • 信號
  • 消息隊列

介紹

在linux下的多個進程間的通訊機制叫作IPC(Inter-Process Communication),它是多個進程之間相互溝通的一種方法。在linux下有多種進程間通訊的方法:半雙工管道、命名管道、消息隊列、信號、信號量、共享內存、內存映射文件,套接字等等。使用這些機制能夠爲linux下的網絡服務器開發提供靈活而又堅固的框架。異步

共享內存

  • 原理:共享內存是在多個進程之間共享內存區域的一種進程間的通訊方式,由IPC爲進程建立的一個特殊地址範圍,它將出如今該進程的地址空間(這裏的地址空間具體是哪一個地方?)中。其餘進程能夠將同一段共享內存鏈接到本身的地址空間中。全部進程均可以訪問共享內存中的地址,就好像它們是malloc分配的同樣。若是一個進程向共享內存中寫入了數據,所作的改動將馬上被其餘進程看到。學習

  • 優缺點:共享內存是IPC最快捷的方式,由於共享內存方式的通訊沒有中間過程,而管道、消息隊列等方式則是須要將數據經過中間機制進行轉換。共享內存方式直接將某段內存段進行映射,多個進程間的共享內存是同一塊的物理空間,僅僅映射到各進程的地址不一樣而已,所以不須要進行復制,能夠直接使用此段空間。
  • 例子:一個進程write存儲輸入,一個進程將讀出共享內存中的數據
  • 生成共享內存

文件爲:sharememory1.c

碼雲連接:

  • 獲取共享內存

文件爲:sharememory2.c

碼雲連接:

  • 結果:

管道

  • 原理:管道實際是用於進程間通訊的一段共享內存,建立管道的進程稱爲管道服務器,鏈接到一個管道的進程爲管道客戶機。一個進程在向管道寫入數據後,另外一進程就能夠從管道的另外一端將其讀取出來。

  • 優缺點:管道是由內核管理的一個緩衝區,一個緩衝區不須要很大,它被設計成爲環形的數據結構,以便管道能夠被循環利用。當管道中沒有信息的話,從管道中讀取的進程會等待,直到另外一端的進程放入信息。當管道被放滿信息的時候,嘗試放入信息的進程會等待,直到另外一端的進程取出信息。當兩個進程都終結的時候,管道也自動消失。
    管道只能在本地計算機中使用,而不可用於網絡間的通訊。
  • 例子:一個進程向管道文件中寫數據,一個進程將讀出數據
  • 向管道文件中寫數據

文件爲:PIPE1.c

碼雲連接:

  • 從管道文件中讀數據

文件爲:PIPE2.c

碼雲連接:

  • 結果

FIFO

  • 原理:命名管道(FIFO)是一種特殊類型的文件,它在系統中以文件形式存在。這樣克服了管道的弊端,他能夠容許沒有親緣關係的進程間通訊。

  • 例子:一個進程向文件中寫數據,一個進程將讀出數據並丟棄
  • 向命名管道文件中寫數據

文件爲:FIFO1.c

碼雲連接:

  • 從命名管道文件中讀數據並丟棄

文件爲:FIFO2.c

碼雲連接:

  • 結果

信號

  • 原理:信號機制是unix系統中最爲古老的進程之間的通訊機制,用於一個或幾個進程之間傳遞異步信號。信號能夠有各類異步事件產生,好比鍵盤中斷等。shell也可使用信號將做業控制命令傳遞給它的子進程。
  • 優缺點:對於命名管道FIFO來講,IO操做和普通管道IO操做基本同樣,可是二者有一個主要的區別,在命名管道中,管道能夠是事先已經建立好的

  • 例子

文件爲:signal.c

碼雲連接:

  • 結果

消息隊列

  • 原理:消息隊列是內核地址空間中的內部鏈表,經過linux內核在各個進程直接傳遞內容,消息順序地發送到消息隊列中,並以幾種不一樣的方式從隊列中得到,每一個消息隊列能夠用IPC標識符惟一地進行識別。內核中的消息隊列是經過IPC的標識符來區別,不一樣的消息隊列直接是相互獨立的。每一個消息隊列中的消息,又構成一個獨立的鏈表。

  • 優缺點:消息隊列克服了信號承載信息量少,管道只能承載無格式字符流。命名管道相比,消息隊列的優點在於:一、消息隊列也能夠獨立於發送和接收進程而存在,從而消除了在同步命名管道的打開和關閉時可能產生的困難。二、同時經過發送消息還能夠避免命名管道的同步和阻塞問題,不須要由進程本身來提供同步方法。三、接收程序能夠經過消息類型有選擇地接收數據,而不是像命名管道中那樣,只能默認地接收。

代碼中運行的問題

在課堂實驗第二部分,設計mystat時,編譯經過後,若是要運行「1.txt」文件,必定要加上文件的名稱,即

./stat 1.txt

而不是

./stat

感覺

此次的課堂實驗測試了咱們學習的內容,感受我本身在新理解一個事物的時候仍是不能很好地利用它,因此第二項測試沒有完整地提交,並且完成的程度也不太好。

經過課下練習,我從新學習了Linux下IPC機制:原理,優缺點。我經過對這幾種機制的瞭解和學習,更好地掌握了這方面的知識。

相關文章
相關標籤/搜索