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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

PIPE 使用介绍

發布時間:2023/12/18 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PIPE 使用介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 一、pipe 簡介
  • 二、pipe 代碼示例


一、pipe 簡介

pipe 也叫無名管道,有如下特點:

  • 半雙工,同一時刻數據只能一端操作
  • 數據只能從一端寫入,從另一端讀出
  • 存儲在內存緩沖區,不存儲在文件系統中,只能用于父子進程通信
  • 數據一旦從管道中讀走,就從管道中釋放空間

二、pipe 代碼示例

創建無名管道,其中 fd[0] 固定用于讀管道,而 fd[1] 固定用于寫管道
一般文件 I/O 的函數都可以用來操作管道( lseek() 除外)
默認情況當管道里沒有數據時,另一個進程調用 read() 函數從管道中讀數據是阻塞的
默認情況當管道里數據滿時,另一個進程調用 write() 函數向管道里寫數據也是阻塞的
通信過程中,當別的進程結束后,當前進程讀端口也關閉后,則再向管道內寫數據時進程會收到SIGPIPE 信號,默認動作為中斷當前進程,不過編程時可通過 fcntl() 函數設置文件的阻塞特性

#include <stdio.h> #include <string.h> #include <unistd.h> #include <stdlib.h> #include <sys/types.h> #include <sys/wait.h> #include <fcntl.h>int main(int argc, char *argv[]) {int fd_pipe[2] = {0};pid_t pid;pipe(fd_pipe);pid = fork();if (0 == pid){sleep(2);char buf[] = "hello world";write(fd_pipe[1], buf, strlen(buf));_exit(0);}else{fcntl(fd_pipe[0], F_SETFL, O_NONBLOCK); // 非阻塞// fcntl(fd_pipe[0], F_SETFL, 0); // 阻塞for (int i=0; i<5; i++){char str[128] = {0};read(fd_pipe[0], str, sizeof(str) ); //讀數據printf("str=[%s]\n", str);sleep(1);}wait(NULL);}return 0; }

總結

以上是生活随笔為你收集整理的PIPE 使用介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。