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

代碼片段和文件信息
#include?
#include?
#include?
#include?
#include?
//聲明全局變量
int?p1p2;
int?fd[2];
//中斷信號處理函數(shù)
void?sig_handler(int?sig_no)
{
????if(sig_no?==?SIGINT)
????{
????????kill(p1SIGUSR1);//給子進程p1發(fā)信號
????????kill(p2SIGUSR1);//給子進程p2發(fā)信號
????}
}
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;//計數(shù)變量
????if(pipe(fd)?0)//創(chuàng)建無名管道
????{
????????perror(“Fail?to?create?pipe.\n“);
????????exit(0);
????}
????signal(SIGINTsig_handler);//中斷信號
????while((p1?=?fork())==-1);//創(chuàng)建子進程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超聲波
評論
共有 條評論