36、IO進程線程/進程和線程之間的通信練習

一、使用有名管道完成兩個進程的相互通信(提示:可以使用多進程或多線程完成)。

代碼1:創建兩個有名管道文件

#include<myhead.h>int main(int argc, const char *argv[])
{if(mkfifo("./mingtohua",0664)==-1)//創建小明向小華發信息的管道文件“mingtohua”{perror("mkfifo mingtohua error");return -1;}if(mkfifo("./huatoming",0664)==-1){perror("mkfifo huatoming error");//創建小華向小明發信息的管道文件“huatoming”return -1;}getchar();//阻塞等待  待聊天結束后刪除兩個管道文件system("rm mingtohua");system("rm huatoming");return 0;
}

代碼2: 供小明發送、接收的代碼:

#include<myhead.h>
void *send_message(void *arg);//負責發送信息的接口
void *receive_message(void *arg);//負責接收信息的接口int main(int argc, const char *argv[])
{pthread_t tid1,tid2;//創建兩個線程if(pthread_create(&tid1,NULL,send_message,NULL)!=0)//負責發送信息的線程{puts("tid1 create error");return -1;}if(pthread_create(&tid2,NULL,receive_message,NULL)!=0)//負責接收信息{puts("tid2 create error");return -1;}if(pthread_join(tid1,NULL)==0 && pthread_join(tid2,NULL)==0)//等待回收兩個線程{puts("xiaoming closed send&receive"); //成回收輸出提示語句}puts("xiaoming off-line");//執行完成 函數結束前輸出提示語句return 0;
}
void *send_message(void *arg)//發送信息
{int wfd=-1;//打開“mingtohua”管道文件if((wfd=open("./mingtohua",O_WRONLY))==-1){perror("open error");return NULL;}char wbuf[128]="";while(1){printf("請輸入>>>");fgets(wbuf,sizeof(wbuf),stdin);//獲取終端輸入wbuf[strlen(wbuf)-1]=0;write(wfd,wbuf,strlen(wbuf));//向管道寫入數據if(strcmp(wbuf,"quit")==0)  //輸入quit結束break;}close(wfd);//關閉管道文件pthread_exit(NULL);//釋放發送信息的線程
}
void *receive_message(void *arg)//接收消息
{int rfd=-1;//打開“huatoming”管道文件if((rfd=open("./huatoming",O_RDONLY))==-1){perror("open error");return  NULL;}char rbuf[128]="";while(1){bzero(rbuf,sizeof(rbuf));//清空數組read(rfd,rbuf,sizeof(rbuf));//讀取管道內數據printf("收到信息:%s\n",rbuf);//終端輸出消息if(strcmp(rbuf,"quit")==0)break;}close(rfd);//關閉文件pthread_exit(NULL);//退出線程
}

代碼3: 供小明發送、接收的代碼:

#include<myhead.h>
void *send_message(void *arg);
void *receive_message(void *arg);int main(int argc, const char *argv[])
{pthread_t tid1,tid2;//創建兩個線程if(pthread_create(&tid1,NULL,send_message,NULL)!=0)//負責發送信息{puts("tid1 create error");return -1;}if(pthread_create(&tid2,NULL,receive_message,NULL)!=0)//負責接收信息{puts("tid2 create error");return -1;}if(pthread_join(tid1,NULL)==0 && pthread_join(tid2,NULL)==0){puts("xiaohua closed send&receive");}puts("xiaohua off-line");return 0;
}
void *send_message(void *arg)
{int wfd=-1;//打開管道文件if((wfd=open("./huatoming",O_WRONLY))==-1){perror("open error");return NULL;}char wbuf[128]="";while(1){printf("請輸入>>>");fgets(wbuf,sizeof(wbuf),stdin);//獲取終端輸入wbuf[strlen(wbuf)-1]=0;write(wfd,wbuf,strlen(wbuf));//向管道寫入數據if(strcmp(wbuf,"quit")==0)break;}close(wfd);pthread_exit(NULL);
}
void *receive_message(void *arg)
{int rfd=-1;if((rfd=open("./mingtohua",O_RDONLY))==-1){perror("open error");return  NULL;}char rbuf[128]="";while(1){bzero(rbuf,sizeof(rbuf));//清空數組read(rfd,rbuf,sizeof(rbuf));//讀取管道內數據printf("收到信息:%s\n",rbuf);if(strcmp(rbuf,"quit")==0)break;}close(rfd);pthread_exit(NULL);
}

運行圖:

思維導圖:

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/696473.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/696473.shtml
英文地址,請注明出處:http://en.pswp.cn/news/696473.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Stable Diffusion 繪畫入門教程(webui)-ControlNet(深度Depth)

上篇文章介紹了線稿約束&#xff0c;這篇文章介紹下深度Depth 文章目錄 一、選大模型二、寫提示詞三、基礎參數設置四、啟用ControlNet 顧名思義&#xff0c;就是把原圖預處理為深度圖&#xff0c;而深度圖可以區分出圖像中各元素的遠近關系&#xff0c;那么啥事深度圖&#xf…

c/c++ | 字符串函數總結 | 為什么總喜歡糾結sizeof 和strlen 呢?

其實時間長了&#xff0c;稍微研究后&#xff0c;再來品味&#xff0c;別有一番滋味 總是看著混亂&#xff0c;但是靜下來看&#xff0c;還是能琢磨透的&#xff0c;只是看著復雜&#xff0c;本質是兩套風格&#xff0c;然后又要有交集&#xff0c;所以就看起來復雜 // 首先字符…

目標管理SMART原則

SMART原則是一種目標管理方法&#xff0c;它包括以下五個要素&#xff1a; 具體性&#xff08;Specific&#xff09;&#xff1a;目標應該是明確的&#xff0c;具體地說明要達成的行為標準。例如&#xff0c;一個目標可能描述為“減少客戶投訴率”&#xff0c;而不是“增強客戶…

本機防攻擊簡介

定義 在網絡中&#xff0c;存在著大量針對CPU&#xff08;Central Processing Unit&#xff09;的惡意攻擊報文以及需要正常上送CPU的各類報文。針對CPU的惡意攻擊報文會導致CPU長時間繁忙的處理攻擊報文&#xff0c;從而引發其他業務的中斷甚至系統的中斷&#xff1b;大量正常…

惠爾頓 網絡安全審計系統 任意文件讀取漏洞復現

0x01 產品簡介 惠爾頓網絡安全審計產品致力于滿足軍工四證、軍工保密室建設、國家涉密網絡建設的審計要求&#xff0c;規范網絡行為&#xff0c;滿足國家的規范&#xff1b;支持1-3線路的internet接入、1-3對網橋&#xff1b;含強大的上網行為管理、審計、監控模塊&#xff1b…

【2024軟件測試面試必會技能】Requests(5):Requests模塊_設置代理

設置代理 代理&#xff08;英語&#xff1a;Proxy&#xff09;&#xff0c;也稱網絡代理&#xff0c;是一種特殊的網絡服務&#xff0c;英文全稱是&#xff08;Proxy Server&#xff09;&#xff0c;其功 能就是代理網絡用戶去取得網絡信息。形象的說&#xff1a;它是網絡信息…

正向代理和反向代理釋義

代理 客戶端 代理 服務端 對客戶端而言&#xff0c;代理是服務端&#xff1b;對服務端而言&#xff0c;代理是客戶端。這個很好理解吧&#xff0c;以祖孫三代關系為例&#xff0c;爸爸在兒子面前是爸爸&#xff0c;爸爸在爺爺面前是兒子。 無論是正向代理還是反向代理&#…

Android14 InputManager-ANR原理

目標窗口查找時&#xff0c;作為派發目標的窗口必須已經準備好接收新的輸入事件&#xff0c;否則判定窗口處于未響應狀態&#xff0c;終止事件的派發過程&#xff0c;并在一段時間后再試。倘若5s后窗口仍然未準備好接收輸入事件&#xff0c;將導致ANR。直接引發ANR的原因有很多…

操作系統學習記錄

系統篇 內核 應用和底層硬件&#xff08;CPU、內存、硬盤等&#xff09;的連接橋梁。 用戶態和內核態 CPU和進程可以在兩種態下運行。 內核態可以直接訪問所有硬件資源&#xff0c;用戶態需要通過“系統調用”陷入到內核態才能否則只能訪問用戶空間地址的內存&#xff08;虛…

P8630 [藍橋杯 2015 國 B] 密文搜索

P8630 [藍橋杯 2015 國 B] 密文搜索 - 洛谷 | 計算機科學教育新生態 (luogu.com.cn)https://www.luogu.com.cn/problem/P8630 題目分析 基本上是hash的板子&#xff0c;但實際上對于密碼串&#xff0c;只要判斷主串中任意連續的八個位置是否存在密碼串即可&#xff1b;那么我們…

PHP學習筆記1——html標簽以及頭部元素頁面布局

html是一種超文本標識符號&#xff0c;用來在網頁中指定顯示頁面格式顯示 基本格式 <!doctype html> <html><head><title></title> </head><body> </body></html> 包含聲明&#xff0c;框架html&#xff0c;頭部head&a…

怎么把公眾號文章鏈接做成二維碼?掃碼查看公眾號推文的方法

公眾號是現在給用戶分享內容的一種方式&#xff0c;通過輸出優質的公眾號文章內容來為關注者提供信息和內容。當我們發布公眾號文章后&#xff0c;有些情況下會需要將公眾號內容生成二維碼之后&#xff0c;印刷到傳單、展板上來顯示&#xff0c;那么如何將公眾號的文章鏈接轉二…

Commonjs 和 Es Module詳解

一 前言 今天我們來深度分析一下 Commonjs 和 Es Module&#xff0c;希望通過本文的學習&#xff0c;能夠讓大家徹底明白 Commonjs 和 Es Module 原理&#xff0c;能夠一次性搞定面試中遇到的大部分有關 Commonjs 和 Es Module 的問題。 帶上疑問開始今天的分析&#xff1a; …

數字化轉型導師堅鵬:城市數字化轉型頂層規劃方法

城市數字化轉型頂層規劃方法 課程背景&#xff1a; 很多城市存在以下問題&#xff1a; 不知道如何系統地開展數字化轉型工作&#xff1f; 不清楚如何科學地制定數字化轉型戰略&#xff1f; 不知道如何高效地實施數字化轉型戰略&#xff1f; 課程特色&#xff1a; 有…

基于SpringBoot的在線拍賣系統設計與實現(源碼+調試+LW+PPT)

項目描述 臨近學期結束&#xff0c;還是畢業設計&#xff0c;你還在做java程序網絡編程&#xff0c;期末作業&#xff0c;老師的作業要求覺得大了嗎?不知道畢業設計該怎么辦?網頁功能的數量是否太多?沒有合適的類型或系統?等等。今天給大家介紹一篇基于SpringBoot的在線拍…

C++編程知識

&#xff08;1&#xff09;把數組中的所有元素賦值為一個值 memset(arr,0x3f,sizeof(arr))//最大值 memset(arr,0,sizeof(distance));//賦值為0&#xff08;2&#xff09;找最大最小值的下標 int zuixiao-1//設置dist-1只是因為方便選取第一個數作為比較對象而已 for(i0;i<…

VSCode將某個字符替換為換行符并換行顯示

不想每次去查了&#xff0c;我自己寫博客記錄一下~~~ 我的需求是一個一行的數據&#xff0c;用逗號分開&#xff0c;我希望豎著看有規律點&#xff0c;類似這樣 快捷鍵其實想 optioncommandf &#xff0c;但是我每次都記不住&#xff0c;大家可以直接在編輯欄找到replace的地方…

vite 快速搭建 Vue3.0項目

一、初始化項目 npm create vite-app <project name>二、進入項目目錄 cd ……三、安裝依賴 npm install四、啟動項目 npm run dev五、配置項目 安裝 typescript npm add typescript -D初始化 tsconfig.json //執行命令 初始化 tsconfig.json npx tsc --init …

Unity Meta XR SDK 快捷配置開發工具【Building Block/Quick Action/OVRCameraRigInteraction】

文章目錄 &#x1f4d5;教程說明&#x1f4d5;Building Block&#x1f4d5;Quick Action&#x1f4d5;OVRCameraRigInteraction 此教程相關的詳細教案&#xff0c;文檔&#xff0c;思維導圖和工程文件會放入 Spatial XR 社區。這是一個高質量 XR 社區&#xff0c;博主目前在內…

【Swift】NSPopUpButton用法和示例

1.簡介 NSPopUpButton 是 macOS 開發中常用的控件之一&#xff0c;它提供了一個彈出菜單&#xff0c;用戶可以從中選擇一個選項。NSPopUpButton 可以包含多個 NSMenuItem 對象&#xff0c;每個 NSMenuItem 表示一個選項。 2.常用方法 下面是一些 NSPopUpButton 的常用功能和…