#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(1),並用C語言實現安全
man
命令學習stat(1),man 1 stat
man -k stat
僞代碼:獲取stat結構體並打印服務器
產品代碼碼雲連接網絡
https://gitee.com/haowenfei25/XinXiAnQuanXiTongSheJiJiChu20155308/blob/master/ketang/stat.c數據結構
研究Linux下IPC機制:原理,優缺點,每種機制至少給一個示例,提交研究博客的連接框架
在linux下的多個進程間的通訊機制叫作IPC(Inter-Process Communication),它是多個進程之間相互溝通的一種方法。在linux下有多種進程間通訊的方法:半雙工管道、命名管道、消息隊列、信號、信號量、共享內存、內存映射文件,套接字等等。使用這些機制能夠爲linux下的網絡服務器開發提供靈活而又堅固的框架。異步
原理:共享內存是在多個進程之間共享內存區域的一種進程間的通訊方式,由IPC爲進程建立的一個特殊地址範圍,它將出如今該進程的地址空間(這裏的地址空間具體是哪一個地方?)中。其餘進程能夠將同一段共享內存鏈接到本身的地址空間中。全部進程均可以訪問共享內存中的地址,就好像它們是malloc分配的同樣。若是一個進程向共享內存中寫入了數據,所作的改動將馬上被其餘進程看到。學習
生成共享內存
文件爲:sharememory1.c
碼雲連接:
文件爲:sharememory2.c
碼雲連接:
原理:管道實際是用於進程間通訊的一段共享內存,建立管道的進程稱爲管道服務器,鏈接到一個管道的進程爲管道客戶機。一個進程在向管道寫入數據後,另外一進程就能夠從管道的另外一端將其讀取出來。
向管道文件中寫數據
文件爲:PIPE1.c
碼雲連接:
文件爲:PIPE2.c
碼雲連接:
原理:命名管道(FIFO)是一種特殊類型的文件,它在系統中以文件形式存在。這樣克服了管道的弊端,他能夠容許沒有親緣關係的進程間通訊。
向命名管道文件中寫數據
文件爲:FIFO1.c
碼雲連接:
文件爲:FIFO2.c
碼雲連接:
優缺點:對於命名管道FIFO來講,IO操做和普通管道IO操做基本同樣,可是二者有一個主要的區別,在命名管道中,管道能夠是事先已經建立好的
例子
文件爲:signal.c
碼雲連接:
原理:消息隊列是內核地址空間中的內部鏈表,經過linux內核在各個進程直接傳遞內容,消息順序地發送到消息隊列中,並以幾種不一樣的方式從隊列中得到,每一個消息隊列能夠用IPC標識符惟一地進行識別。內核中的消息隊列是經過IPC的標識符來區別,不一樣的消息隊列直接是相互獨立的。每一個消息隊列中的消息,又構成一個獨立的鏈表。
優缺點:消息隊列克服了信號承載信息量少,管道只能承載無格式字符流。命名管道相比,消息隊列的優點在於:一、消息隊列也能夠獨立於發送和接收進程而存在,從而消除了在同步命名管道的打開和關閉時可能產生的困難。二、同時經過發送消息還能夠避免命名管道的同步和阻塞問題,不須要由進程本身來提供同步方法。三、接收程序能夠經過消息類型有選擇地接收數據,而不是像命名管道中那樣,只能默認地接收。
在課堂實驗第二部分,設計mystat時,編譯經過後,若是要運行「1.txt」文件,必定要加上文件的名稱,即
./stat 1.txt
而不是
./stat
此次的課堂實驗測試了咱們學習的內容,感受我本身在新理解一個事物的時候仍是不能很好地利用它,因此第二項測試沒有完整地提交,並且完成的程度也不太好。
經過課下練習,我從新學習了Linux下IPC機制:原理,優缺點。我經過對這幾種機制的瞭解和學習,更好地掌握了這方面的知識。