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

Linux通信--構(gòu)建進程通信的 方案之管道(下)|使用匿名管道實現(xiàn)功能解耦|命名管道實現(xiàn)serve&client通信

這篇具有很好參考價值的文章主要介紹了Linux通信--構(gòu)建進程通信的 方案之管道(下)|使用匿名管道實現(xiàn)功能解耦|命名管道實現(xiàn)serve&client通信。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

文章目錄

一、管道的應用實例-父進程喚醒子進程,子進程執(zhí)行某種任務

二、命名管道

1.創(chuàng)建一個命名管道

2.匿名管道與命名管道的區(qū)別

3.命名管道的打開規(guī)則

4.用命名管道實現(xiàn)server&client通信


Linux通信--構(gòu)建進程通信的 方案之管道(下)|使用匿名管道實現(xiàn)功能解耦|命名管道實現(xiàn)serve&client通信,linux,c++,linux,vscode,后端,centos


一、匿名管道的應用實例-父進程喚醒子進程,子進程執(zhí)行某種任務

后續(xù)將源碼上傳到gitee,上傳后修改鏈接。

二、命名管道

  • 管道應用的一個限制就是只能具有共同祖先的進程進行通信
  • 如果想讓不相關(guān)的進程交換數(shù)據(jù),可以使用FIFO文件來做,它被稱為命名管道
  • 命名管道是一種特殊的文件

1.創(chuàng)建一個命名管道

創(chuàng)建命令:mkfifo filename

創(chuàng)建函數(shù): int mkfifo(const char * filename,mode_t mode);

參數(shù):管道的名字,創(chuàng)建的管道權(quán)限

2.匿名管道與命名管道的區(qū)別

  • 匿名管道由pipe函數(shù)創(chuàng)建并打開
  • 命名管道由mkfifo函數(shù)創(chuàng)建,打開用open
  • FIFO(命名管道)與pipe(匿名管道)之間的區(qū)別在于,他們創(chuàng)建與打開的方式不同,這些工作完成后,他們有相同的語義。

3.命名管道的打開規(guī)則

  • 如果是只讀方式打開FIFO
  • O_NONBLOCK disable:阻塞直到有相應進程為寫而打開FIFO
  • O_NONBLOCK enable:立刻返回成功
  • 如果是只寫方式打開FIFO
  • O_NONBLOCK disable:阻塞直到有相應進程為讀而打開FIFO
  • O_NONBLOCK enable:立刻返回失敗,錯誤碼為ENXIO

4.用命名管道實現(xiàn)server&client通信

實例功能:

1創(chuàng)建管道

2 創(chuàng)建的命名管道可以讓兩個進程通信

3. 進程A 向管道中寫入 進程B從管道中讀取并打印到標準輸出

需求分析:首先需要創(chuàng)建兩個進程,client端和server端,還需要一個common文件來聲明共同的定義和方法,所以創(chuàng)建三個文件client.cc,server.cc,common.hpp。接下來逐個文件分析

1.首先,創(chuàng)建管道,只需要創(chuàng)建一次即可,本次案例在server.cc中創(chuàng)建,client.cc中使用即可

common.hpp
#pragma once 
#include<iostream>
#include<string>
#define NUM 1024
const std::string fifoname = "./fifo";
uint32_t mode = 0666;


server.cc

umask = 0; //這個設置不影響系統(tǒng)的umask,只影響此進程的
int n = mkfifo(fifoname.c_str(),mode);

至此管道已經(jīng)創(chuàng)建

2.讓服務端直接開啟管道文件

int rfd = open(fifoname.c_str(),O_RDONLY);
//打開失敗
if(rfd < 0)
{
    std::cout<<errno<<endl;
    return 2;
}

//打開成功
    ....

3.client端不需要創(chuàng)建文件,只用寫方式打開文件就可以

// int open(const char * pathname ,int oflag, ...) 
//成功則返回文件描述符,失敗-1


int wfd = open(filename.c_str(),O_WRONLY);
if(wfd <0)
{
    //寫方式打開失敗
    return 1;
}


4.兩端開始通信

server端:
 
char buffer[1024];
while(true)
{
    buffer[0] = 0;

    //read(int fd , void * buf, size_t count) fd是文件描述符,用于要定位讀取的文件或者其他設備,buf為緩沖區(qū)地址,count是要讀取的字節(jié)數(shù),讀成功返回實際讀取的字節(jié)數(shù),返回復數(shù)讀取失敗,返回0讀取到文件末尾
    
    //從rfd文件中讀取x個字節(jié)到buffer中
    ssize_t n = read(rfd,buffer,sizeof(buffer)-1);

    if(n> 0)
    {
        buffer[n] = 0;
        std::cout<<"client " <<buffer <<std::endl;
    }

    else if(n== 0)
    {
        std::cout<<"client quit, me too" <<std::endl;
        break;
    }

    else
    {
        std::cout<<errno<<std::endl;
        break;
     }
}

client端:

    char buffer[NUM];
    while(true)
    {
        std::cout<<"please enter your message : ";
        char * msg = fgets(buffer,sizeof(buffer)-1,stdin);
        assert(msg);
        (void)msg;
        
        //處理發(fā)送消息的回車,最后一個字符刪掉
        buffer[strlen(buffer)-1] = o;
        ssize_t n = write(wfd,buffer,strlen(buffer));
        assert(n>= 0);
        (void)n;
    }

    
    

5.兩端通信結(jié)束,關(guān)閉對應的文件描述符

close(wfd);

close(rfd);文章來源地址http://www.zghlxwxcb.cn/news/detail-682710.html


到了這里,關(guān)于Linux通信--構(gòu)建進程通信的 方案之管道(下)|使用匿名管道實現(xiàn)功能解耦|命名管道實現(xiàn)serve&client通信的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • 【LInux】進程間通信 -- 匿名管道

    【LInux】進程間通信 -- 匿名管道

    我們在學習進程管理,進程替換時,都強調(diào)了 進程的獨立性 ,那進程間通信是什么?這好像和進程的獨立性 相矛盾 吧? 那么今天,我們就來學習 進程間通信 ,和第一種通信方式 – 管道 進程間通信,并沒有破壞進程的獨立性這一特點,這點我們在 管道 講解 而進程通信的

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

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

    ?個人主頁: 北 海 ??所屬專欄: Linux學習之旅 ??操作環(huán)境: CentOS 7.6 阿里云遠程服務器 進程間通信簡稱為 IPC (Interprocess communication),是兩個不同進程間進行任務協(xié)同的必要基礎。進行通信時,首先需要確保不同進程之間構(gòu)建聯(lián)系,其次再根據(jù)不同的使用場景選擇不同

    2024年02月08日
    瀏覽(48)
  • Linux--進程間的通信-匿名管道

    Linux--進程間的通信-匿名管道

    進程間通信(IPC,Interprocess Communication)是指在不同進程之間傳輸數(shù)據(jù)和交換信息的一種機制。它允許多個進程在同一操作系統(tǒng)中同時運行,并實現(xiàn)彼此之間的協(xié)作 。 進程間通信方式: 管道(Pipe) : 管道是最基本的進程間通信方式 ,它是一種 半雙工 的通信方式,通過管

    2024年04月14日
    瀏覽(28)
  • 【看表情包學Linux】IPC 進程間通信 | PIPE 管道 | 匿名管道 | 管道通信的原理 | 系統(tǒng)調(diào)用: pipe 接口

    【看表情包學Linux】IPC 進程間通信 | PIPE 管道 | 匿名管道 | 管道通信的原理 | 系統(tǒng)調(diào)用: pipe 接口

    ?? ??? 爆笑 教程 ????《看表情包學Linux》 ?? CSDN 累計訂閱量破千的火爆 C/C++ 教程的 2023 重制版,C 語言入門到實踐的精品級趣味教程。 了解更多: ?? ?\\\"不太正經(jīng)\\\" 的專欄介紹? ← 試讀第一章 訂閱鏈接: ?? 《C語言趣味教程》 ← 猛戳訂閱! 目錄 Ⅰ. 進程間通信(I

    2024年02月14日
    瀏覽(24)
  • 【探索Linux】—— 強大的命令行工具 P.14(進程間通信 | 匿名管道 | |進程池 | pipe() 函數(shù) | mkfifo() 函數(shù))

    【探索Linux】—— 強大的命令行工具 P.14(進程間通信 | 匿名管道 | |進程池 | pipe() 函數(shù) | mkfifo() 函數(shù))

    當今計算機系統(tǒng)中,進程間通信扮演著至關(guān)重要的角色。隨著計算機系統(tǒng)的發(fā)展和復雜性的增加,多個進程之間的協(xié)作變得更加必要和常見。進程間通信使得不同進程能夠共享資源、協(xié)調(diào)工作、傳輸數(shù)據(jù),并實現(xiàn)更加復雜和強大的功能。本文將深入探討進程間的通信,以及管

    2024年02月05日
    瀏覽(28)
  • 【Linux】匿名管道實現(xiàn)簡單進程池

    管道內(nèi)部沒有數(shù)據(jù)且子進程不關(guān)閉自己的寫端文件fd,讀端(父進程)就要阻塞等待,直到管道里有數(shù)據(jù)。 管道內(nèi)部被寫滿了且父進程(讀端)不關(guān)閉自己的讀端fd,寫端(子進程)寫滿以后就要阻塞等待。 對于寫端而言,如果寫端不寫了且關(guān)閉了寫端fd,讀端就會將管道中

    2024年04月22日
    瀏覽(22)
  • 【Linux】匿名管道與命名管道,進程池的簡易實現(xiàn)

    【Linux】匿名管道與命名管道,進程池的簡易實現(xiàn)

    本質(zhì)是先讓不同的進程看到同一份資源,也就是兩個進程都能對管道文件的緩沖區(qū)進行操作 這里我們pipe的時候,會使用兩個文件描述符,這兩個文件描述里面存的file結(jié)構(gòu)體是同一個,也就是管道文件的file結(jié)構(gòu)體,file結(jié)構(gòu)體中存儲有inode以及系統(tǒng)緩沖區(qū),此時fork一個子進程

    2024年02月05日
    瀏覽(23)
  • 進程間通信之匿名管道

    進程間通信之匿名管道

    1.進程間為什么要進行通信? 進程間通信的是為了協(xié)調(diào)不同的進程,使之能在一個操作系統(tǒng)里同時運行,并相互傳遞、交換信息。 2.進程間通信的目的包括: 數(shù)據(jù)傳輸:一個進程需要將它的數(shù)據(jù)發(fā)送給另一個進程; 資源共享:多個進程間共享同樣的資源; 通知事件:一個進程

    2024年02月16日
    瀏覽(25)
  • 【Linux從入門到精通】通信 | 管道通信(匿名管道 & 命名管道)

    【Linux從入門到精通】通信 | 管道通信(匿名管道 & 命名管道)

    ? ? 本派你文章主要是對進程通信進行詳解。主要內(nèi)容是介紹 為什么通信、怎么進行通信。其中本篇文章主要講解的是管道通信。希望本篇文章會對你有所幫助。 文章目錄 一、進程通信簡單介紹 1、1 什么是進程通信 1、2?為什么要進行通信 ?1、3 進程通信的方式 二、匿名管

    2024年02月09日
    瀏覽(19)
  • Linux系統(tǒng)編程:采用管道的方式實現(xiàn)進程間通信

    Linux系統(tǒng)編程:采用管道的方式實現(xiàn)進程間通信

    目錄 一.?進程間通信概述 二.?管道的概念? 三.?通過管道實現(xiàn)進程間通信 3.1?實現(xiàn)原理 3.2?匿名管道創(chuàng)建系統(tǒng)接口pipe 3.3?管道通信的模擬實現(xiàn) 3.4?管道通信的訪問控制規(guī)則 3.5?管道通信的特點 四.?通過匿名管道實現(xiàn)進程池 4.1?進程池的概念 4.2?進程池的模擬實現(xiàn) 五.?命名

    2024年02月12日
    瀏覽(24)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包