国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

多進程間通信學習之有名管道

這篇具有很好參考價值的文章主要介紹了多進程間通信學習之有名管道。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

  • 有名管道:
  • 區(qū)別于無名管道,其可以用于任意進程間的通信;
  • 同無名管道一樣,也是半雙工的通信方式;
  • 有名管道的大小也是64KB;
  • 也是不能使用lseek函數(shù);
  • 其本質上,是在內存上,在文件系統(tǒng)上只是一個標識
  • 有名管道會創(chuàng)建一個管道文件,只需要打開這個文件,進行相應的讀寫操作即可;
  • 讀寫特點:
  • 若讀端存在寫管道,那么有多少數(shù)據(jù),就寫多少數(shù)據(jù),直到有名管道寫滿為止,此時會出現(xiàn)寫阻塞;
  • 若讀端不存在寫管道,會出現(xiàn)兩種情況
  • 第一種:讀端沒有打開,寫端open函數(shù)的位置阻塞;
  • 第二種:讀端打開后關閉,會出現(xiàn)管道破裂的現(xiàn)象;
  • 若寫端存在讀管道,那么有多少數(shù)據(jù),就讀多少數(shù)據(jù),沒有數(shù)據(jù)的時候,會出現(xiàn)阻塞等待
  • 若寫端不存在讀管道,也會出現(xiàn)兩種情況;
  • 第一種:寫端沒有打開,讀端open函數(shù)的位置阻塞;
  • 第二種:寫端打開后關閉,有多少數(shù)據(jù),就讀多少,沒有數(shù)據(jù)的時候,就會立即返回,即非阻塞的狀態(tài);
  • 創(chuàng)建有名管道(mkfifo函數(shù)):
	#include <sys/types.h>
	#include <sys/stat.h>
	
	int mkfifo(const char *pathname, mode_t mode);
	/*
	功能:
	
			創(chuàng)建管道文件
	
	參數(shù):
	
	    	pathname:管道路徑和名字
	
	    	mode:管道文件的權限
	
	返回值:
	
	    	成功 0
	
	    	失敗 -1 重置錯誤碼
	*/
  • 示例代碼:
  • 寫端:
	#include <stdio.h>
	#include <string.h>
	#include <stdlib.h>
	
	#include <unistd.h>
	#include <sys/types.h>
	#include <sys/stat.h>
	#include <fcntl.h>
	
	#include <sys/wait.h>
	#include <stdbool.h>
	
	int main(int argc, char const *argv[])
	{
	    int fd = open("./fifo_k",O_WRONLY);
	    if(-1 == fd)
	    {
	        perror("open error");
	        exit(-1);
	    }
	    char buf[128] = {0};
	    while(true)
	    {
	        memset(buf,0,sizeof(buf));
	        fgets(buf,sizeof(buf),stdin);
	        buf[strlen(buf) - 1] = '\0';
	        write(fd,buf,sizeof(buf));
	        if(!strncmp(buf,"quit",4))
	        {
	            exit(-1);
	
	        }
	    }
	    close(fd);
	    
	    return 0;
	}


  • 讀端:
	#include <stdio.h>
	#include <string.h>
	#include <stdlib.h>
	
	#include <unistd.h>
	#include <sys/types.h>
	#include <sys/stat.h>
	#include <fcntl.h>
	
	#include <sys/wait.h>
	#include <stdbool.h>
	
	int main(int argc, char const *argv[])
	{
	    int fd = open("./fifo_k",O_RDONLY);
	    if(-1 == fd)
	    {
	        perror("open error");
	        exit(-1);
	    }
	    char buf[128] = {0};
	    while(true)
	    {
	        memset(buf,0,sizeof(buf));
	        read(fd,buf,sizeof(buf));
	        if(!strncmp(buf,"quit",4))
	        {
	            exit(-1);
	
	        }
	        printf("寫端發(fā)來的數(shù)據(jù)[%s]\n",buf);
	    }
	    close(fd);
	    
	    return 0;
	}
	

  • 運行結果:
  • 寫端:
	hello
	china
	quit
  • 讀端:
	寫端發(fā)來的數(shù)據(jù)[hello]
	寫端發(fā)來的數(shù)據(jù)[china]

文章來源地址http://www.zghlxwxcb.cn/news/detail-734143.html

到了這里,關于多進程間通信學習之有名管道的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 【Linux】進程間通信——進程間通信的介紹和分類、管道、匿名管道、命名管道、匿名管道與命名管道的區(qū)別

    【Linux】進程間通信——進程間通信的介紹和分類、管道、匿名管道、命名管道、匿名管道與命名管道的區(qū)別

    ??進程間通信(IPC,Interprocess communication)是一組編程接口,讓程序員能夠協(xié)調不同的進程,使之能在一個操作系統(tǒng)里同時運行,并相互傳遞、交換信息。這使得一個程序能夠在同一時間里處理許多用戶的要求。因為即使只有一個用戶發(fā)出要求,也可能導致一個操作系統(tǒng)中

    2024年02月05日
    瀏覽(24)
  • 管道-有名管道

    管道-有名管道

    一、有名管道? 有名管道與匿名管道的不同: 有名管道提供了一個路徑名,并以FIFO的文件形式存在于文件系統(tǒng)中。 與匿名管道不同,有名管道可以被不相關的進程使用,只要它們可以訪問該路徑,就能夠通過有名管道進行通信。 FIFO的打開和使用方式: 一旦打開了有名管道

    2024年02月07日
    瀏覽(11)
  • 【Linux】進程通信之管道通信詳解

    【Linux】進程通信之管道通信詳解

    ?? 作者: 阿潤菜菜 ?? 專欄: Linux系統(tǒng)編程 其實管道通信是Unix中最古老的進程間通信的形式了: 管道通信是一種進程間通信的方式,它可以讓一個進程的輸出作為另一個進程的輸入,實現(xiàn)數(shù)據(jù)的傳輸、資源的共享、事件的通知和進程的控制。 管道通信分為兩種類型:匿名

    2023年04月19日
    瀏覽(46)
  • 【Linux】進程通信之匿名管道通信

    【Linux】進程通信之匿名管道通信

    我們往往需要多個進程協(xié)同,共同完成一些事情。 數(shù)據(jù)傳輸:一個進程需要將它的數(shù)據(jù)發(fā)送給另一個進程 資源共享:多個進程之間共享同樣的資源。 通知事件:一個進程需要向另一個或一組進程發(fā)送消息,通知它(它們)發(fā)生了某種事件(如進程終止 時要通知父進程)。

    2024年04月14日
    瀏覽(24)
  • 【Linux】進程間通信(匿名管道 & 命名管道)-- 詳解

    【Linux】進程間通信(匿名管道 & 命名管道)-- 詳解

    如何理解進程間通信? 進程具有獨立性,所以進程想要通信難度是比較大的,成本高。 在日常生活中,通信的本質是傳遞信息,但站在程序員角度來看, 進程間通信的本質:讓不同的進程看到同一份資源(內存空間) 。 進程間通信就是進程之間互相傳遞數(shù)據(jù),那么進程間

    2024年04月28日
    瀏覽(26)
  • 進程間通信之利用命名管道進行通信

    進程間通信之利用命名管道進行通信

    命名管道(Named Pipe),也被稱為FIFO(First In, First Out),是一種在Unix和Unix-like操作系統(tǒng)中用于進程間通信的特殊文件類型。它允許不相關的進程通過文件系統(tǒng)中的路徑名進行通信。 命名管道(Named Pipe)是一種在Unix和Unix-like系統(tǒng)中用于進程間通信的特殊文件類型。它的作用主

    2024年01月19日
    瀏覽(23)
  • 進程間通信(命名管道)

    進程間通信(命名管道)

    目錄: ?????????? 1.命名管道 ?????????? 2.創(chuàng)建命名管道 --------------------------------------------------------------------------------------------------------------------------------- 1.命名管道 1.管道的一個應用限制就是只能在具有共同祖先(具有親緣關系)的進程間通信 2.如果我們想在不相

    2024年02月06日
    瀏覽(20)
  • Linux——進程間通信、管道

    Linux——進程間通信、管道

    進程間的通信就是 在不同進程之間傳播或交換信息。 舉個例子: 古時,兩軍交戰(zhàn)不斬來使; 因為兩軍互相是獨立的,所以使節(jié)就是兩軍之間傳話的進行傳話的; 而在OS中,進程之間也是相互獨立的,但某項工作并不是一個進程就可以完成,而是多個進程之間相互協(xié)助完成;

    2024年02月22日
    瀏覽(23)
  • Linux進程通信:無名管道

    Linux進程通信:無名管道

    (1)數(shù)據(jù)傳輸:進程間數(shù)據(jù)傳輸; (2)通知事件:一個進程向另一個或一組進程發(fā)送消息,通知某個事件的發(fā)生(如子進程終止時需通知父進程); (3)資源共享:多個進程共享資源,需要內核提供同步互斥機制; (4)進程控制:某進程需要控制另一個進程的執(zhí)行(如

    2023年04月24日
    瀏覽(23)
  • 進程間通信-命名管道

    進程間通信-命名管道

    ????????先前已經了解了匿名管道,但是這是適用于有血緣關系的進程間,如果無血緣關系的進程要實現(xiàn)通信, 此時需要有另一種通信方案-命名管道。為什么命名管道可以用于無血緣關系的進程間通信,什么是命名管道,為什么說它是有名字的,后面我們會一一了解。

    2024年01月20日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包