嵌入式學習筆記Day27

今天主要學習了進程間的通信,主要學習了通過管道進行通信

一、進程間的通信

進程間的通信方式有以下幾種:
1.管道
2.信號
3.消息隊列
4.共享內存
5.信號燈
6.套接字

二、管道

2.1無名管道

無名管道只能用于具有親緣關系的進程間通信

函數接口:pipeint pipe(int pipefd[2]);功能:創建一個無名管道參數:pipefd[0]:讀管道文件描述符pipefd[1]:寫管道文件描述符返回值:成功返回0 失敗返回-1 無名管道特性:1.管道中至少有一個寫端: 讀取數據時,如果管道中有數據直接讀取,管道中沒有數據阻塞等待直到有數據寫入讀出,繼續向后執行2.管道中沒有寫端:讀取數據時,如果管道中有數據直接讀取,管道中沒有數據不阻塞等待直接向下執行3.管道中至少有一個讀端:寫入數據時,如果管道中沒有存滿(64k),則直接寫入,管道中如果存滿,則阻塞等待直到有數據讀出,才能繼續寫入4.管道中沒有讀端:寫入數據時,會產生管道破裂錯誤,導致程序崩潰

通過無名管道通信的實例:

#include "head.h"int main(void)
{pid_t pid;int fd[2];int ret = 0;int cnt = 0;char tmpbuff[4096] = {0};ret = pipe(fd);if (-1 == ret){perror("fail to pipe");return -1;}pid = fork();if (-1 == pid){perror("fail to fork");return -1;}if (0 == pid){close(fd[0]);strcpy(tmpbuff, "hello world");while (1){write(fd[1], tmpbuff, sizeof(tmpbuff));cnt++;printf("cnt = %d\n", cnt);}}else if (pid > 0){close(fd[0]);sleep(5);read(fd[0], tmpbuff, sizeof(tmpbuff));}while (1){}return 0;
}

2.2有名管道

打開管道文件 -> 讀寫管道文件 -> 關閉管道文件注意:有名管道必須讀寫兩端同時加入才能繼續向下執行1.mkfifo int mkfifo(const char *pathname, mode_t mode);功能:創建一個管道文件參數:pathname:管道文件路徑mode:權限返回值:成功返回0 失敗返回-1 

使用實例:

#include "head.h"int fatob = 0;
int fbtoa = 0;
pthread_t tid_send;
pthread_t tid_recv;void *sendfun(void *arg)
{	char tmpbuff[1024] = {0};while (1){memset(tmpbuff, 0, sizeof(tmpbuff));gets(tmpbuff);write(fatob, tmpbuff, strlen(tmpbuff));if (!strcmp(tmpbuff, ".quit")){break;}}pthread_cancel(tid_recv);return NULL;
}void *recvfun(void *arg)
{char tmpbuff[1024] = {0};while (1){memset(tmpbuff, 0, sizeof(tmpbuff));read(fbtoa, tmpbuff, sizeof(tmpbuff));if (!strcmp(tmpbuff, ".quit")){break;}printf("RECV:%s\n", tmpbuff);}pthread_cancel(tid_send);return NULL;
}int main(void)
{char tmpbuff[1024] = {0};mkfifo("/tmp/ATOB", 0777);mkfifo("/tmp/BTOA", 0777);fatob = open("/tmp/ATOB", O_WRONLY);if (-1 == fatob){perror("fail to open");return -1;}fbtoa = open("/tmp/BTOA", O_RDONLY);if (-1 == fbtoa){perror("fail to open");return -1;}pthread_create(&tid_send, NULL, sendfun, NULL);pthread_create(&tid_recv, NULL, recvfun, NULL);pthread_join(tid_send, NULL);pthread_join(tid_recv, NULL);close(fatob);close(fbtoa);return 0;
}

三、信號

信號用來實現內核層和用戶層信息的交互,也可以用來實現進程間通信
1.信號的種類:

         1) SIGHUP	 2) SIGINT	 3) SIGQUIT	 4) SIGILL	 5) SIGTRAP6) SIGABRT	 7) SIGBUS	 8) SIGFPE	 9) SIGKILL	10) SIGUSR111) SIGSEGV	12) SIGUSR2	13) SIGPIPE	14) SIGALRM	15) SIGTERM16) SIGSTKFLT	17) SIGCHLD	18) SIGCONT	19) SIGSTOP	20) SIGTSTP21) SIGTTIN	22) SIGTTOU	23) SIGURG	24) SIGXCPU	25) SIGXFSZ26) SIGVTALRM	27) SIGPROF	28) SIGWINCH	29) SIGIO	30) SIGPWR31) SIGSYS	34) SIGRTMIN	35) SIGRTMIN+1	36) SIGRTMIN+2	37) SIGRTMIN+338) SIGRTMIN+4	39) SIGRTMIN+5	40) SIGRTMIN+6	41) SIGRTMIN+7	42) SIGRTMIN+843) SIGRTMIN+9	44) SIGRTMIN+10	45) SIGRTMIN+11	46) SIGRTMIN+12	47) SIGRTMIN+1348) SIGRTMIN+14	49) SIGRTMIN+15	50) SIGRTMAX-14	51) SIGRTMAX-13	52) SIGRTMAX-1253) SIGRTMAX-11	54) SIGRTMAX-10	55) SIGRTMAX-9	56) SIGRTMAX-8	57) SIGRTMAX-758) SIGRTMAX-6	59) SIGRTMAX-5	60) SIGRTMAX-4	61) SIGRTMAX-3	62) SIGRTMAX-263) SIGRTMAX-1	64) SIGRTMAX	

2.信號處理方式:

    1.缺省:按照系統默認的方式處理2.忽略:不響應信號3.捕捉:按照自定義方式處理信號9號信號SIGKILL19號信號SIGSTOP 這兩個信號不能被忽略和捕捉以下三個信號可以從鍵盤輸入:SIGINT:ctrl + c SIGQUIT:ctrl + \SIGTSTP:ctrl + z4.signal typedef void (*sighandler_t)(int);sighandler_t signal(int signum, sighandler_t handler);功能:改變信號的處理方式參數:signum:信號的編號handler:信號的處理方式SIG_IGN     忽略處理SIG_DFL     缺省處理函數首地址   捕捉處理返回值:成功返回之前處理函數的首地址失敗返回SIG_ERR 

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

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

相關文章

Nacos進階

目錄 Nacos支持三種配置加載方案 Namespace方案 DataID方案 Group方案 同時加載多個配置集 Nacos支持三種配置加載方案 Nacos支持“Namespacegroupdata ID”的配置解決方案。 詳情見:Nacos config alibaba/spring-cloud-alibaba Wiki GitHub Namespace方案…

《TCP/IP詳解 卷一》第12章 TCP初步介紹

目錄 12.1 引言 12.1.1 ARQ和重傳 12.1.2 滑動窗口 12.1.3 變量窗口:流量控制和擁塞控制 12.1.4 設置重傳的超時值 12.2 TCP的引入 12.2.1 TCP服務模型 12.2.2 TCP可靠性 12.3 TCP頭部和封裝 12.4 總結 12.1 引言 關于TCP詳細內容,原書有5個章…

【C++ map和set】

文章目錄 map和set序列式容器和關聯式容器鍵值對setset的主要操作 mapmap主要操作 multiset和multimap map和set 序列式容器和關聯式容器 之前我們接觸的vector,list,deque等,這些容器統稱為序列式容器,其底層為線性序列的的數據結構,里面存…

【LV14 day4 字符設備驅動基礎框架】

一、字符設備驅動框架解析 設備的操作函數如果比喻是樁的話(性質類似于設備操作函數的函數,在一些場合被稱為樁函數),則: 驅動實現設備操作函數 ----------- 做樁 insmod調用的init函數主要作用 --------- 釘樁 rm…

都說了能不動就別動,非要去調整,出生產事故了吧

MyBatis 替換成 MyBatis-Plus 背景介紹 一個老項目,數據庫用的是 MySQL 5.7.36 , ORM 框架用的 MyBatis 3.5.0 , mysql-connector-java 版本是 5.1.26 新來了一個干練的小伙,精力充沛,看著就是一個喜歡折騰的主 他…

leetcode 3.1

leetcode hot 100 雙指針1.三數之和2.接雨水 多維動態規劃1.最長公共子序列 雙指針 1.三數之和 三數之和 排序 雙指針的方法&#xff0c;固定一個數nums[i], 用兩數和找target - nums[i] 的數需要注意兩點: 1.需要去掉重復數字 while (l < r && nums[l] nums[…

社交APP開發能給用戶帶來什么

現在的社交軟件也非常的多&#xff0c;每款社交軟件都有自己的特色&#xff0c;社交軟件是日常中必備的軟件&#xff0c;不管是生活交流還是感情工作交流都是比較方便的&#xff0c;因為社交軟件滿足了日常的遠程交流問題&#xff0c;所以開發社交軟件也會逐漸的流行起來的。 …

Error: T doesn‘t have .length

Error: T doesn‘t have .length 在 TypeScript 中&#xff0c;當我們使用泛型 <T> 時&#xff0c;有時會遇到一個常見問題&#xff1a;編譯器提示錯誤&#xff0c;指出泛型類型 T 不具備 .length 屬性。在本文中&#xff0c;我們將探討這個問題的解決方案&#xff0c;并…

【Qt學習】QLCDNumber的介紹與實例使用(倒計時功能)

文章目錄 1. 介紹2. 實例 - QLCDNumber倒計時3. 資源文件 1. 介紹 QLCDNumber是Qt框架中用于顯示數字的控件&#xff0c;它模擬了一個液晶數字顯示屏。 在Designer界面中顯示如下&#xff1a; 有以下 常用屬性&#xff1a; 屬性描述intValue獲取或設置QLCDNumber顯示的整數…

Redis高級特性詳解:事務處理、發布訂閱、持久化和集群

Redis&#xff08;Remote Dictionary Server&#xff09;是一個開源的基于內存的數據結構存儲系統&#xff0c;被廣泛應用于緩存、隊列、計數器等場景中。除了基本的鍵值存儲功能外&#xff0c;Redis還提供了許多高級特性&#xff0c;包括事務處理、發布訂閱、持久化和集群。在…

js截取圖片地址后面的參數和在路徑中截取文件名或后綴名

文章目錄 前言截取地址 &#xff1f;后面的參數在路徑中截取文件名或后綴名總結 前言 在處理網頁上的圖片資源或者其他類型的文件資源時&#xff0c;你可能會遇到需要使用這些技巧的情況。以下是一些具體的使用場景&#xff1a; 動態修改圖片參數&#xff1a;如果你有一個圖片U…

【BBuf的CUDA筆記】十四,OpenAI Triton入門筆記三 FusedAttention

0x0. 前言 繼續Triton的學習&#xff0c;這次來到 https://triton-lang.org/main/getting-started/tutorials/06-fused-attention.html 教程。也就是如何使用Triton來實現FlashAttention V2。對于FlashAttention和FlashAttention V2網上已經有非常多的介紹了&#xff0c;大家如…

Win11系統安裝安卓子系統教程

隨著Win11系統的不斷普及&#xff0c;以及硬件設備的更新換代&#xff0c;我相信很多同學都已經更新并使用到了最新的Win11系統。那么&#xff0c;Win11系統最受期待的功能“Windows Subsystem for Android”&#xff08;簡稱WSA&#xff09;&#xff0c;即《安卓子系統》。他可…

spring.factories的常用配置項

概述 spring.factories 實現是依賴 spring-core 包里的 SpringFactoriesLoader 類&#xff0c;這個類實現了檢索 META-INF/spring.factories 文件&#xff0c;并獲取指定接口的配置的功能。 Spring Factories機制提供了一種解耦容器注入的方式&#xff0c;幫助外部包&am…

掘根寶典之C語言字符串輸入函數(gets(),fgets(),get_s())

字符串輸入前的注意事項 如果想把一個字符串讀入程序&#xff0c;首先必須預留該字符串的空間&#xff0c;然后用輸入函數獲取該字符串 這意味著必須要為字符串分配足夠的空間。 不要指望計算機在讀取字符串時順便計算它的長度&#xff0c;然后再分配空間(計算機不會這樣做&a…

ai圖生文的軟件!分享4個受歡迎的!

在數字化時代&#xff0c;隨著人工智能技術的飛速發展&#xff0c;AI圖生文軟件已經成為自媒體人、創作者和廣告從業者手中的得力助手。這些軟件能夠將靜態的圖片轉化為生動的文字&#xff0c;為圖片注入靈魂&#xff0c;讓觀者仿佛置身于畫面之中。今天&#xff0c;就讓我們一…

LabVIEW和Python開發微細車削控制系統

LabVIEW和Python開發微細車削控制系統 為滿足現代精密加工的需求&#xff0c;開發了一套基于LabVIEW和Python的微細車削控制系統。該系統通過模塊化設計&#xff0c;實現了高精度的加工控制和G代碼的自動生成&#xff0c;有效提高了微細車削加工的自動化水平和編程效率。 項目…

cjson報錯

今天遇到個問題&#xff0c;使用CJSON把一個cjson對象給一個cjson對象的時候報錯&#xff0c;是segment問題 &#xff0c;原因是我在個cjson對象數據的時候&#xff0c;有幾個是char的&#xff0c;但是是個時間的字符串&#xff0c;一般20位就夠了&#xff0c;但是由于是通過mo…

1950-2022年各省逐年平均降水量數據

1950-2022年各省逐年平均降水量數據 1、時間&#xff1a;1950-2022年 2、指標&#xff1a;省逐年平均降水量 3、范圍&#xff1a;33省&#xff08;不含澳門&#xff09; 4、指標解釋&#xff1a;逐年平均降水數據是指當年的日降水量的年平均值&#xff0c;不是累計值&#…

ONLYOFFICE 桌面編輯器 v8.0 更新內容詳細攻略

文章目錄 引言PDF 表單RTL 支持電子表格中的新增功能Moodle 集成用密碼保護 PDF 文件從“開始”菜單快速創建文檔本地界面主題下載安裝桌面編輯工具總結 引言 官網鏈接&#xff1a; ONLYOFFICE 官方網址 ONLYOFFICE 桌面編輯器是一款免費的文檔處理軟件&#xff0c;適用于 Li…