日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

210124阶段三信号屏蔽,管道通信

發(fā)布時間:2024/4/13 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 210124阶段三信号屏蔽,管道通信 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄

  • 一、學(xué)習(xí)的知識點(diǎn)
    • 1屏蔽信號
    • 2管道
      • 2.1匿名管道
      • 2.2命名管道
  • 二、上課沒有聽懂或者沒有理解的地方
  • 三、當(dāng)天學(xué)習(xí)的收獲

一、學(xué)習(xí)的知識點(diǎn)

  • 64個信號源 前32個信號 每個信號都有對應(yīng)的函數(shù)指針(回調(diào)函數(shù)),
  • 從信號到函數(shù)指針中間還有64個開關(guān)(mask)(屏蔽信號),開關(guān)默認(rèn)允許,只有允許信號才能觸發(fā)函數(shù)指針
  • 屏蔽信號之前還有pending(未決寄存器)。發(fā)送一個信號,對應(yīng)的pending為1.pending用戶只能查看,屏蔽信號才能被用戶操作。函數(shù)指針被執(zhí)行后,pending自動清零。被阻塞則為1。
  • 信號源-》pending-》屏蔽開關(guān)-》函數(shù)指針
  • 1屏蔽信號

  • sigset_t best;定義一個信號集合
  • sigemptyset(&best); 清空信號集,相當(dāng)于字符指針的清零
  • sigaddset(&best,SIGINT); 把要屏蔽的信號放入集合
  • sigprocmask(SIG_BLOCK, &best, NULL); 屏蔽2號信號 SIG_BLOCK 設(shè)置為阻塞 best 要屏蔽的信號集
  • sigprocmask(SIG_UNBLOCK, &pset, NULL); 取消屏蔽信號
  • sigfillset(&pset); //所有信號加進(jìn)去 32 33 沒有
  • sigdelset(&pset,SIGINT) 刪除某個信號
  • sigismember(&pset,SIGINT); 查看信號是否在信號集中
  • 2管道

  • 緩存(是一段內(nèi)存),在內(nèi)核,緩存數(shù)據(jù),用于進(jìn)程間通信
  • 管道是unix中最古老的進(jìn)程間通信的形式
  • 把一個進(jìn)程連接到另一個進(jìn)程的一個數(shù)據(jù)流稱為 管道
  • 是半雙工通信。
  • 匿名管道只能用于父子進(jìn)程或兄弟進(jìn)程間。
  • 2.1匿名管道

    int pipefd[2];//文件描述符數(shù)組 成功返回0if (pipe(pipefd) == -1) //創(chuàng)建一個無名管道{perror("pipe");exit(EXIT_FAILURE);}pid_t pid = fork();if (pid == 0){close(pipefd[0]);//子進(jìn)程往管道寫入一個數(shù)據(jù)write(pipefd[1], "hello", 5); // 寫 pipefd[1]close(pipefd[1]);exit(EXIT_SUCCESS);}//父進(jìn)程從管道讀出數(shù)據(jù)sleep(1);char buff[16] = { 0 };read(pipefd[0], buff, 10); //讀取管道 讀取到?jīng)]有為止 因此size可以大一點(diǎn)cout << "buff=" << buff << endl;

    2.2命名管道

    if (access(url, F_OK) == -1) //F_OK 判斷文件是否存在{if (mkfifo(url, 0777) == -1){perror("mkfifo error");return 0;}else{cout << "fifo install url=" << url << endl;}} if (mkfifo(url, 0777) == -1) {perror("mkfifo error");return 0; } //寫進(jìn)程會阻塞到有一個讀進(jìn)程來讀這個FIFO管道。就是沒有進(jìn)程來讀文件,則寫進(jìn)程會阻塞在open語句。 fd = open(url, O_WRONLY); //打開命名管道 ret = write(fd, buf, strlen(buf)); //向管道寫入數(shù)據(jù) ret = read(fd, buf, sizeof(buf)); //從管道讀出數(shù)據(jù)

    二、上課沒有聽懂或者沒有理解的地方

    三、當(dāng)天學(xué)習(xí)的收獲

    信號屏蔽、使用管道進(jìn)行進(jìn)程間通信

    總結(jié)

    以上是生活随笔為你收集整理的210124阶段三信号屏蔽,管道通信的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。