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

管道-有名管道

這篇具有很好參考價(jià)值的文章主要介紹了管道-有名管道。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一、有名管道?

  1. 有名管道與匿名管道的不同:

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

    • 一旦打開了有名管道,可以使用與操作匿名管道和其他文件相同的 I/O 系統(tǒng)調(diào)用,如 read()、write()close()。
  3. 數(shù)據(jù)交換順序和先入先出(FIFO):

    • 與管道類似,有名管道也有一個(gè)寫入端和讀取端。
    • 從有名管道中讀取數(shù)據(jù)的順序與寫入的順序是一樣的,符合先入先出(FIFO)的原則。
  4. FIFO的特點(diǎn):

    • FIF0在文件系統(tǒng)中作為一個(gè)特殊文件存在,但其內(nèi)容存放在內(nèi)存中。
    • 當(dāng)使用有名管道的進(jìn)程退出后,F(xiàn)IFO文件仍然保存在文件系統(tǒng)中,以便以后使用。

?

管道-有名管道,c語言,算法,開發(fā)語言,c++,linux,服務(wù)器

?

管道-有名管道,c語言,算法,開發(fā)語言,c++,linux,服務(wù)器

?

管道-有名管道,c語言,算法,開發(fā)語言,c++,linux,服務(wù)器

?二、有名管道創(chuàng)建

  • 有名管道的路徑和名稱可以根據(jù)實(shí)際需求進(jìn)行設(shè)置,但應(yīng)遵循文件系統(tǒng)的規(guī)則。
  • 有名管道創(chuàng)建成功后,其他進(jìn)程可以通過相同的路徑和名稱打開該有名管道,以進(jìn)行進(jìn)程間通信。
  • 在實(shí)際應(yīng)用中,需要對返回值進(jìn)行更詳細(xì)的錯(cuò)誤處理,并根據(jù)需要設(shè)置更復(fù)雜的權(quán)限模式。
/*
    創(chuàng)建fifo文件
    1. 通過命令 : mkfifo名字
    2. 通過函數(shù) : int mkfifo(const char *pathname,mode_t mode);


    #include<sys/types.h>
    #include<sys/stat.h>
    int mkfifo(const char *pathname,mode_t mode);
        參數(shù):
            -pathname: 管道名稱的路徑
            -mode: 文件的權(quán)限,和open的mode一樣
        返回值:
            -成功:0
            -失敗:-1,并設(shè)置錯(cuò)誤號
 *
 */
#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include <string.h>

int main(){
    int ret =mkfifo("fifo1",0664);
    if(ret==-1){
        perror("mkfifo");
        exit(0);
    }
    return 0;
}

?三、案例

????????一個(gè)用于向有名管道寫入數(shù)據(jù),另一個(gè)用于從有名管道中讀取數(shù)據(jù)。這兩個(gè)程序共同演示了有名管道的基本用法

?write端:

  • 判斷文件是否存在,如果不存在則創(chuàng)建有名管道文件。
  • 以只寫方式打開管道。
  • 使用 write 函數(shù)向管道中寫入數(shù)據(jù)。

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>

// 向管道中寫數(shù)據(jù)
/*
    有名管道的注意事項(xiàng):
        1.一個(gè)為只讀而打開一個(gè)管道的進(jìn)程會阻塞,直到另外一個(gè)進(jìn)程為只寫打開管道
        2.一個(gè)為只寫而打開一個(gè)管道的進(jìn)程會阻塞,直到另外一個(gè)進(jìn)程為只讀打開管道

    讀管道:
        管道中有數(shù)據(jù),read返回實(shí)際讀到的字節(jié)數(shù)
        管道中無數(shù)據(jù):
            管道寫端被全部關(guān)閉,read返回0,(相當(dāng)于讀到文件末尾)
            寫端沒有全部被關(guān)閉,read阻塞等待

    寫管道:
        管道讀端被全部關(guān)閉,進(jìn)行異常終止(收到一個(gè)SIGPIPE信號)
        管道讀端沒有全部關(guān)閉:
            管道已經(jīng)滿了,write會阻塞
            管道沒有滿,write將數(shù)據(jù)寫入,并返回實(shí)際寫入的字節(jié)數(shù)。
*/
int main() {

    // 1.判斷文件是否存在
    int ret = access("test", F_OK);
    if(ret == -1) {
        printf("管道不存在,創(chuàng)建管道\n");

        // 2.創(chuàng)建管道文件
        ret = mkfifo("test", 0664);

        if(ret == -1) {
            perror("mkfifo");
            exit(0);
        }

    }

    // 3.以只寫的方式打開管道
    int fd = open("test", O_WRONLY);
    if(fd == -1) {
        perror("open");
        exit(0);
    }

    // 寫數(shù)據(jù)
    for(int i = 0; i < 100; i++) {
        char buf[1024];
        sprintf(buf, "hello, %d\n", i);
        printf("write data : %s\n", buf);
        write(fd, buf, strlen(buf));
        sleep(1);
    }

    close(fd);

    return 0;
}

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

  • 以只讀方式打開管道。
  • 使用 read 函數(shù)從管道中讀取數(shù)據(jù)。
  • 當(dāng)寫端關(guān)閉后,read 返回 0,程序檢測到寫端斷開連接并退出。
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>

// 從管道中讀取數(shù)據(jù)
int main() {

    // 1.打開管道文件
    int fd = open("test", O_RDONLY);
    if(fd == -1) {
        perror("open");
        exit(0);
    }

    // 讀數(shù)據(jù)
    while(1) {
        char buf[1024] = {0};
        int len = read(fd, buf, sizeof(buf));
        if(len == 0) {
            printf("寫端斷開連接了...\n");
            break;
        }
        printf("recv buf : %s\n", buf);
    }

    close(fd);

    return 0;
}

到了這里,關(guān)于管道-有名管道的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 深度學(xué)習(xí)服務(wù)器(Linux)開發(fā)環(huán)境搭建教程

    深度學(xué)習(xí)服務(wù)器(Linux)開發(fā)環(huán)境搭建教程

    當(dāng)你拿到一臺服務(wù)器的使用權(quán)時(shí),最頭疼的莫過于登陸服務(wù)區(qū)并配置開發(fā)環(huán)境。本文將從0開始,講述一臺剛申請的服務(wù)器遠(yuǎn)程登陸并配置開發(fā)環(huán)境的全過程。希望對你有所幫助 打開MobaXterm軟件,創(chuàng)建一個(gè)新的Session,選擇SSH登陸。其中Remote host填服務(wù)器的IP地址,Specify userna

    2024年02月05日
    瀏覽(19)
  • FTP服務(wù)器移植到Linux開發(fā)板

    FTP服務(wù)器移植到Linux開發(fā)板

    提示:寫完文章后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 提示:這里可以添加本文要記錄的大概內(nèi)容: 將Linux開發(fā)板作為一個(gè)小型的 FTP 服務(wù)器,這樣就可以通過 FileZilla 軟件直接在開發(fā)板和 windows 之間通過網(wǎng)絡(luò)進(jìn)行文件互傳。在開發(fā)板上搭建 FTP 服務(wù)器很簡單

    2024年02月14日
    瀏覽(22)
  • 【Linux后端服務(wù)器開發(fā)】UDP協(xié)議

    【Linux后端服務(wù)器開發(fā)】UDP協(xié)議

    目錄 一、端口號 二、UDP報(bào)頭格式 三、UDP的特點(diǎn) 四、UDP協(xié)議實(shí)現(xiàn)網(wǎng)絡(luò)聊天群 端口號port標(biāo)識了一個(gè)主機(jī)上進(jìn)行通信的不同的應(yīng)用程序。 0 ~ 1023:系統(tǒng)端口號,HTTP、FTP、SSH等這些廣為使用的應(yīng)用層協(xié)議,它們的端口號都是固定的系統(tǒng)端口號(知名端口號) 1024 ~ 65535:操作系統(tǒng)

    2024年02月16日
    瀏覽(20)
  • 【Linux后端服務(wù)器開發(fā)】IP協(xié)議

    【Linux后端服務(wù)器開發(fā)】IP協(xié)議

    目錄 一、IP協(xié)議概述 二、協(xié)議頭格式 三、網(wǎng)段劃分 四、IP地址的數(shù)量限制 五、路由 六、分片和組裝 主機(jī) :配有IP地址,但是不進(jìn)行路由控制的設(shè)備 路由器 :即配有IP地址,又能進(jìn)行路由控制 節(jié)點(diǎn) :主機(jī)和路由器的總稱 IP :將數(shù)據(jù)從A主機(jī)跨網(wǎng)絡(luò)傳輸?shù)紹主機(jī)的能力,IP =

    2024年02月15日
    瀏覽(39)
  • 多進(jìn)程間通信學(xué)習(xí)之有名管道

    有名管道: 區(qū)別于 無名管道,其可以用于 任意進(jìn)程間的通信 ; 同無名管道一樣,也是 半雙工的通信方式 ; 有名管道的大小也是 64KB ; 也是 不能使用lseek函數(shù) ; 其本質(zhì)上,是在內(nèi)存上,在文件系統(tǒng)上 只是一個(gè)標(biāo)識 ; 有名管道會創(chuàng)建一個(gè)管道文件,只需要打開這個(gè)文件

    2024年02月07日
    瀏覽(17)
  • 使用pycharm遠(yuǎn)程連接到Linux服務(wù)器進(jìn)行開發(fā)

    使用pycharm遠(yuǎn)程連接到Linux服務(wù)器進(jìn)行開發(fā)

    本地的 PyCharm 能達(dá)到和遠(yuǎn)程服務(wù)器之間的文件同步; 本地的 PyCharm 能夠使用遠(yuǎn)程服務(wù)器的開發(fā)環(huán)境; PyCharm:PyCharm 2021.3 (Professional Edition) Linux服務(wù)器:Ubuntu20.04 配置項(xiàng)路徑:Tools ,Deployment,Configuration 在 Connection?標(biāo)簽頁中,點(diǎn)擊【···】,對 SFTP 連接進(jìn)行編輯。 Username:注

    2024年02月08日
    瀏覽(22)
  • 【Linux后端服務(wù)器開發(fā)】socket套接字

    【Linux后端服務(wù)器開發(fā)】socket套接字

    目錄 一、socket 套接字概述 二、socket 函數(shù)接口 三、IP地址與端口號的網(wǎng)絡(luò)格式 四、TCP協(xié)議的本地通信C語言示例 socket 是什么? socket 本質(zhì)上是一個(gè)抽象的概念,它是一組用于 網(wǎng)絡(luò)通信的 API , 提供了一種統(tǒng)一的接口 ,使得應(yīng)用程序可以通過網(wǎng)絡(luò)進(jìn)行通信。在不同的操作系統(tǒng)

    2024年02月16日
    瀏覽(25)
  • 在linux服務(wù)器中對R語言中for循環(huán)設(shè)置多核運(yùn)行

    在linux服務(wù)器中對R語言中for循環(huán)設(shè)置多核運(yùn)行

    在R中構(gòu)建了for循環(huán),由于循環(huán)過多,運(yùn)行速度過慢,且不同循環(huán)之間是并行關(guān)系,擬通過多核運(yùn)行可以解決此問題。 b.sh 應(yīng)以 nohup 運(yùn)行,防止網(wǎng)絡(luò)斷掉 多核運(yùn)行: 1、https://www.cnblogs.com/ywliao/articles/6681781.html/ 2、https://blog.csdn.net/u012252959/article/details/116201536 OPENBLAS_NUM_THREAD 1、

    2024年02月08日
    瀏覽(24)
  • 【Linux后端服務(wù)器開發(fā)】基礎(chǔ)IO與文件系統(tǒng)

    【Linux后端服務(wù)器開發(fā)】基礎(chǔ)IO與文件系統(tǒng)

    目錄 一、基礎(chǔ)IO 1. C語言文件讀寫 2. 標(biāo)志位傳參 3. C語言與系統(tǒng)調(diào)用關(guān)系 二、文件系統(tǒng) 1. 文件描述符 2. 輸入輸出重定向 文件調(diào)用 庫函數(shù)接口: fopen、fclose、fwrite、fread、fseek 系統(tǒng)調(diào)用接口:open、close、write、read、lseek r/w/a :讀/寫/追加 若打開的文件不存在,“r”報(bào)錯(cuò),“

    2024年02月15日
    瀏覽(24)
  • Linux系統(tǒng)編程,使用C語言實(shí)現(xiàn)簡單的FTP(服務(wù)器/客戶端)

    Linux系統(tǒng)編程,使用C語言實(shí)現(xiàn)簡單的FTP(服務(wù)器/客戶端)

    前言 跟著上官社長 陳哥花了一個(gè)月的時(shí)間終于把Linux系統(tǒng)編程學(xué)的差不多了,這一個(gè)月真的是頭疼啊,各種bug,調(diào)的真心心累,不過好在問題都解決掉了,在此也感謝一下答疑老師,給我提供了很多的思路,本文章是對前段時(shí)間學(xué)習(xí)Linux,做一個(gè)小小的總結(jié),才疏學(xué)淺,只學(xué)

    2024年02月12日
    瀏覽(23)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包