linux函数实验报告,linux实验报告
(1) 使用vi命令編寫程序pipe0.c: main() {
int fd[2];
char OutPipe[100],InPipe[100]; pipe(fd);
while((pid1=fork())== -1); if(pid1= =0) {
lockf(fd[1],1,0);
sprintf(OutPipe,“child 1 is sending message!”); /*把串放入數組outpipe中*/
write(fd[1],OutPipe,50); /*把串放入數組outpipe中*/ sleep(5); /*自我阻塞5秒*/ lockf(fd[1],0,0); exit(0); } else {
while((pid2=fork())== -1); if(pid2==0) {
lockf(fd[1],1,0); /*互斥*/ sprintf(OutPipe,“child 2 is sending message!”); write(fd[1],OutPipe,50); sleep(5); lockf(fd[1],0,0); exit(0); } else {
wait(0); /*同步*/
read(fd[0],InPipe,50); /*從管道中讀長為50字節的串*/ printf(“%s\\n”,InPipe); wait(0); } } }
(2)運行結果:
21
在顯示結果時:
child 2 is sending message!(延遲5秒后顯示) child 1 is sending message!(再延遲5秒) (3)分析原因:
本實驗利用函數pipe()建立通信管道,兩個子進程分別向管道寫入信號,父進程讀取管道信號在顯示,管道的寫入操作分別加鎖實現互斥操作。子進程1先建立,所以第一次讀取的管道信號是子進程發來的,等待子進程1終止后再從管道讀取信號,此時的信號是子進程2發來的。由于管道通信的互斥、同步等通信機制,執行結果不會再出現隨機性。 2.在父進程中用pipe()建立一條管道線,往管道里寫一句話,兩個子進程接收這句話。 (1) 使用vi命令編寫程序pipe1.c: main() {
int fd[2];
char OutPipe[100],InPipe[100]; pipe(fd);
while((pid1=fork())==-1); if(pid1==0)
{ sleep(2);
lockf(fd[0],1,0); read(fd[0],InPipe,50);
printf(\ printf(\
lockf(fd[0],0,0); exit(0); } else {
while((pid2=fork())==-1); if(pid2==0 ) { sleep(2); lockf(fd[0],1,0); read(fd[0],InPipe,50);
printf(\ printf(\
22
lockf(fd[0],0,0); exit(0); } else {
lockf(fd[1],1,0);
sprintf(OutPipe,\ write(fd[1],OutPipe,50); lockf(fd[1],0,0); sleep(5); wait(); sleep(5);
wait(); exit(0); } } }
(2)運行結果:
(3)分析原因:
本實驗利用函數pipe()在父進程中建立通信管道,兩個子進程分別接收來自父進程的寫入信號。子進程1先建立,所以第一次讀取的管道信號是子進程發來的,等待子進程1終止后再從管道讀取信號,此時的信號是子進程2發來的。
二、流程圖
開始 初始化變量 創建子進程pid1 否 子進程pid1創建是否成功? 是 當前是父進程? 否 創建子進程pid2 否 23 子進程pid2創建是否成功? 是 寫入管道打印
三、實驗總結
本次實驗在編寫程序pipe.c時,利用函數pipe()建立通信管道,兩個子進程分別向管道寫入信號,父進程讀取管道信號在終端顯示。在編寫程序pipe1.c時,利用函數pipe()在父進程中建立通信管道,兩個子進程分別接收來自父進程的寫入信號。按照實驗要求,發現兩次的調試結果居然一樣。我總結出此次實驗主要是利用函數pipe()建立通信管道,子進程或父進程從通信管道讀取信號然后在終端顯示出來。
(四)消息的發送與接收實驗
【實驗目的】
1.了解什么是消息。 2.熟悉消息傳送機理。 3.編程實現消息的發送與接收。
【實驗內容】
一、消息的發送與接收
1.消息的創建、發送和接收。使用系統調用msgget( ),msgsnd( ),msgrev( ),及msgctl( )編制一長度為1k的消息發送和接收的程序。 (1) 使用vi命令編寫程序client.c和server.c: ①client.c
void client()
24
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的linux函数实验报告,linux实验报告的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: xshell linux托文件夹,Xsh
- 下一篇: linux 其他常用命令