資源簡介
包含代碼和文檔
實驗一
實驗內容
編寫程序,演示多進程并發執行和進程軟中斷、管道通信。
父進程使用系統調用pipe( )建立一個管道,然后使用系統調用fork()創建兩個子進程,子進程1和子進程2;
子進程1每隔1秒通過管道向子進程2發送數據:
I send you x times. (x初值為1,每次發送后做加一操作)
子進程2從管道讀出信息,并顯示在屏幕上。
父進程用系統調用signal()捕捉來自鍵盤的中斷信號(即按Ctrl+C鍵);當捕捉到中斷信號后,父進程用系統調用Kill()向兩個子進程發出信號,子進程捕捉到信號后分別輸出下列信息后終止:
Child Process l is Killed by Parent!
Child Process 2 is Killed by Parent!
父進程等待兩個子進程終止后,釋放管道并輸出如下的信息后終止
Parent Process is Killed!
實驗二
實驗內容
過Linux多線程與信號燈機制,設計并實現計算機線程與I/O線程共享緩沖區的同步與通信。
程序要求:兩個線程,共享公共變量a
線程1負責計算(1到100的累加,每次加一個數)
線程2負責打印(輸出累加的中間結果)
實驗三
實驗內容
利用多個共享內存(有限空間)構成的環形緩沖,將源文件復制到目標文件,實現兩個進程的謄抄。
實驗四
實驗內容
1、(1)Blink程序的編譯和下載
(2)給Blink程序加入printf,在每次定時器事件觸發點亮LED的同時通過串口顯示信息
(3)修改BLink程序,只使用一個Timer,三個LED燈作為3位的二進制數表示(亮燈為1,不亮為0),按照0-7的順序循環顯示,同時將數值顯示在終端上。

代碼片段和文件信息
#include?
#include?
#include?
#include?
#include?
//聲明全局變量
int?p1p2;
int?fd[2];
//中斷信號處理函數
void?sig_handler(int?sig_no)
{
????if(sig_no?==?SIGINT)
????{
????????kill(p1SIGUSR1);//給子進程p1發信號
????????kill(p2SIGUSR1);//給子進程p2發信號
????}
}
void?sh(int?sig_no)
{
????close(fd[0]);
????close(fd[1]);
????if(p1?==?0?&&?sig_no?==?SIGUSR1)//子進程p1退出
????{
????????printf(“Child?Process1?is?killed?by?Parent!\n“);
????????exit(0);
????}
????if(p2?==?0?&&?sig_no?==?SIGUSR1)//子進程p2退出
????{
????????printf(“Child?Process2?is?killed?by?Parent!\n“);
????????exit(0);
????}
}
int?main(void)
{
????char?buf[100];
????char?recive[100];
????int?x?=?1;//計數變量
????if(pipe(fd)?0)//創建無名管道
????{
????????perror(“Fail?to?create?pipe.\n“);
????????exit(0);
????}
????signal(SIGINTsig_handler);//中斷信號
????while((p1?=?fork())==-1);//創建子進程p1
????if(p1?==?0)//子進程p1
????{
????????signal(SIGINTSIG_IGN);
????????signal(SIGUSR1sh);
????????while(1){
????????????close(fd[0]);
????????????sprintf(recive“I?send?you?%d?times.“x);
????????????write(fd[1]recive30);
????????????x++;
????????????sleep(1);
????????}
????}
????else?if(p1?>0)//返回父進程
????{
????????while((p2?=?fork())==-1);
????????if(p2?==?0)//子進程p2
????????{
??
????????????signal(SIGINTSIG_IGN);
????????????signal(SIGUSR1sh);
????????????while(1){
????????????????close(fd[1]);
????????????????read(fd[0]buf40);
????????????????printf(“%s\n“buf);
????????????}
????????}
//父進程等待子進程p1p2退出
????????waitpid(p1NULL0);
????????waitpid(p2NULL0);
????????close(fd[0]);
????????close(fd[1]);
????????printf(“Parent?Process?is?killed!\n“);
????}
????return?0;
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2017-04-13?07:48??X201605005+覃家旺\
?????目錄???????????0??2017-06-16?17:24??X201605005+覃家旺\lib1\
?????文件????????1818??2017-04-13?07:48??X201605005+覃家旺\lib1\lib1.c
?????目錄???????????0??2017-06-16?17:26??X201605005+覃家旺\lib2\
?????文件????????2441??2017-04-19?15:03??X201605005+覃家旺\lib2\lib2.c
?????目錄???????????0??2017-06-16?17:32??X201605005+覃家旺\lib3\
?????文件????????1631??2017-05-10?17:27??X201605005+覃家旺\lib3\copy.c
?????文件????????1597??2017-05-10?16:59??X201605005+覃家旺\lib3\get.c
?????文件????????2003??2017-05-10?17:25??X201605005+覃家旺\lib3\main.c
?????文件????????1479??2017-05-10?17:36??X201605005+覃家旺\lib3\put.c
?????目錄???????????0??2017-05-24?15:06??X201605005+覃家旺\lib4\
?????目錄???????????0??2017-05-24?14:41??X201605005+覃家旺\lib4\1\
?????文件????????2673??2017-05-21?22:19??X201605005+覃家旺\lib4\1\bl
?????文件????????3297??2017-05-24?14:41??X201605005+覃家旺\lib4\1\bl
?????文件?????????108??2017-05-21?22:09??X201605005+覃家旺\lib4\1\Makefile
?????文件?????????678??2012-08-21?02:28??X201605005+覃家旺\lib4\1\README.txt
?????目錄???????????0??2017-05-21?22:02??X201605005+覃家旺\lib4\1\build\
?????目錄???????????0??2017-05-24?15:01??X201605005+覃家旺\lib4\1\build\telosb\
?????文件??????372883??2017-05-24?15:00??X201605005+覃家旺\lib4\1\build\telosb\app.c
?????文件?????????180??2017-05-24?15:00??X201605005+覃家旺\lib4\1\build\telosb\ident_flags.txt
?????文件???????30915??2017-05-24?15:00??X201605005+覃家旺\lib4\1\build\telosb\main.exe
?????文件???????25039??2017-05-24?15:00??X201605005+覃家旺\lib4\1\build\telosb\main.ihex
?????文件???????25401??2017-05-24?15:00??X201605005+覃家旺\lib4\1\build\telosb\tos_image.xm
?????目錄???????????0??2017-05-24?14:39??X201605005+覃家旺\lib4\2\
?????文件????????2673??2017-05-24?11:54??X201605005+覃家旺\lib4\2\bl
?????文件????????3094??2017-05-24?14:39??X201605005+覃家旺\lib4\2\bl
?????文件?????????108??2017-05-21?22:09??X201605005+覃家旺\lib4\2\Makefile
?????文件?????????678??2012-08-21?02:28??X201605005+覃家旺\lib4\2\README.txt
?????目錄???????????0??2017-05-21?22:34??X201605005+覃家旺\lib4\2\build\
?????目錄???????????0??2017-05-24?15:03??X201605005+覃家旺\lib4\2\build\telosb\
?????文件??????372434??2017-05-24?15:03??X201605005+覃家旺\lib4\2\build\telosb\app.c
............此處省略88個文件信息
- 上一篇:tender.zip
- 下一篇:STM32f103超聲波
評論
共有 條評論