進程間通信之socketpair

進程間通信之socketpair

源代碼

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/wait.h>int main()
{//父子通訊管道int m_pipe[2];//創建管道if(socketpair(AF_UNIX,SOCK_STREAM,0,m_pipe) < 0){   printf("create socketpair pipe failed\n");  return -1; }   //建立子進程pid_t pid =fork();//子進程創建失敗if(pid <0) {   close(m_pipe[0]); close(m_pipe[1]); return -1; }   else if(pid == 0){   //關閉子進程管道讀端close(m_pipe[0]);//重定向標準輸出到子進程管道寫端dup2(m_pipe[1],STDOUT_FILENO);//重定向標準輸入到子進程管道寫端//dup2(m_pipe[1],STDIN_FILENO);//關閉子進程管道寫端close(m_pipe[1]);//執行linux命令行const char* argv[] = {"ls", "-l","-a", "/home/banting/test/test_dir/",NULL};execvp("/usr/bin/ls",(char* const*)argv);//子進程結束return 0;}else if(pid > 0){   //保存子進程的進程idint m_pid = pid;//關閉父進程管道的寫端close(m_pipe[1]);//非阻塞等待子進程退出while(waitpid(m_pid,NULL,WNOHANG) == 0){//睡眠1毫秒usleep(1000);//讀取子進程的輸出信息char buff[4096] = {0};int read_len = read(m_pipe[0],buff,sizeof(buff)-4);if(read_len <= 0){continue;}buff[read_len] = '\0';//打印子進程輸出信息printf("print child process output info begin...\n");printf("%s\n",buff);printf("print child process output info end...\n");return 0;}}return 0;
}  

測試

[banting@localhost test]$ vim test.cpp 
[banting@localhost test]$ gcc -g test.cpp -o test
[banting@localhost test]$ ./test
print child process output info begin...
total 12
drwxrwxr-x. 2 banting banting   23 Jun 17 09:56 .
drwxrwxr-x. 9 banting banting 8192 Jun 17 10:55 ..
-rw-rw-r--. 1 banting banting    0 Jun 17 09:56 test1.txtprint child process output info end...
[banting@localhost test]$ ls -tlr 

參考文獻

sockpair創建雙向通信的管道
dup和dup2應用及案例
Linux系統編程之exec函數族

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/87834.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/87834.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/87834.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

跟著AI學習C# Day29

&#x1f4c5; Day 29&#xff1a;C# 綜合進階知識回顧與職業發展建議 ? 學習目標&#xff1a; 回顧 C# 進階學習路徑&#xff1b;總結核心知識點&#xff0c;構建完整的技能體系&#xff1b;理解 C# 高級開發者應具備的核心能力&#xff1b;探索 C# 在不同技術領域的應用場…

茶席布置實訓室:傳承與創新的茶文化空間

一、茶席布置實訓室的重要意義 茶席布置實訓室是茶文化傳承與創新的重要載體。在現代社會&#xff0c;茶文化的弘揚不僅是對傳統的尊重&#xff0c;更是對生活品質和精神境界的追求。茶席布置實訓室為人們提供了一個專業、系統地學習和實踐茶文化的場所。它將理論知識與實際操…

jar is missing

在父POM中通過dependencyManagement統一管理版本&#xff0c;然后在子模塊中省略版本號。

Linux 內核中 TCP 協議棧的輸出實現:tcp_output.c 文件解析

在網絡通信領域,TCP(傳輸控制協議)作為核心的傳輸層協議,確保了數據在網絡中的可靠傳輸。Linux 內核中的 TCP 協議棧實現復雜而高效,其中 net/ipv4/tcp_output.c 文件是整個 TCP 協議棧的關鍵組成部分,負責處理數據包的發送、重傳、連接管理等核心功能。本文將深入解析該…

MySQL分頁原理與慢SQL優化實戰

分頁查詢的本質 在Web應用中&#xff0c;分頁是處理大量數據的常見需求。MySQL中的分頁通常使用LIMIT offset, size語法實現&#xff0c;例如&#xff1a; SELECT * FROM users ORDER BY id LIMIT 10000, 20; 這條語句看似簡單&#xff0c;但隱藏著性能陷阱。讓我們深入理解…

Taro:跨端開發的終極解決方案

在當今多終端并存的互聯網時代&#xff0c;開發者經常面臨一個難題&#xff1a;如何高效地為不同平臺&#xff08;如微信小程序、H5、React Native 等&#xff09;開發功能一致的應用&#xff1f;傳統的開發方式需要針對每個平臺單獨編寫代碼&#xff0c;不僅效率低下&#xff…

STM32F103C8T6 學習筆記摘要(三)

第一節 跑馬燈實驗 1. 了解電路 結構圖 說明一下&#xff1a; 那幾個LED的引腳線和數碼管的是一樣的&#xff0c;如果不想讓LED亮&#xff0c;就可以把J11的接線帽拔了這里的引腳是PA0-PA7 原理圖 說明一下&#xff1a; 當J11接線帽蓋上時&#xff0c;VCC3.3_LED就會有一個正…

GitHub Copilot 配置快捷鍵

GitHub Copilot 常用快捷鍵&#xff08;VS Code&#xff09; 功能快捷鍵&#xff08;Windows/Linux&#xff09;快捷鍵&#xff08;macOS&#xff09;接受建議&#xff08;選中的&#xff09;TabTab下一個建議Alt ]Option ]上一個建議Alt [Option [手動觸發建議Ctrl Ente…

C++異常處理:深入理解與實踐指南

C異常處理&#xff1a;深入理解與實踐指南 在現代編程中&#xff0c;異常處理是確保程序健壯性和可靠性的重要機制。C作為一種功能強大的編程語言&#xff0c;提供了豐富的異常處理機制&#xff0c;幫助開發者應對程序運行時可能出現的各種意外情況。本文將深入探討C異常處理的…

MySQL數據庫的類型

文章目錄 數值類型tinyint類型bit類型小數類型decimal 日期類型日期和時間類型 字符串類型charvarchar enum和set 數值類型 類型大小范圍&#xff08;有符號&#xff09;范圍&#xff08;無符號&#xff09;用途TINYINT1 Bytes(-128&#xff0c;127)(0&#xff0c;255)小整數值…

【Docker基礎】Docker鏡像管理:docker build詳解

目錄 1 Docker鏡像基礎概念 1.1 什么是Docker鏡像 1.2 鏡像的分層結構 2 docker build命令詳解 2.1 docker build基本語法 2.2 構建上下文概念 3 Dockerfile編寫實踐示例 3.1 Dockerfile指令詳解 3.1.1 FROM 3.1.2 RUN 3.1.3 COPY vs ADD 3.1.4 CMD vs ENTRYPOINT …

在 macOS 上部署 Akash Network 的完整 Shell 腳本解決方案

以下是在 macOS 上部署 Akash Network 的完整 Shell 腳本解決方案,包含詳細注釋和錯誤處理: #!/bin/bash # Akash Network macOS 部署腳本 v2.5 # 功能:在 macOS 系統上完整部署 Akash Network 節點和客戶端工具 # 作者:DeepSeek 區塊鏈團隊 # 日期:2025-06-20 # 文檔:h…

【分布式理論】讀確認數與寫確認數:分布式一致性的核心概念

文章目錄 零、概述一、基本概念解釋1、 什么是寫確認數&#xff08;w&#xff09;&#xff1f;2、 什么是讀確認數&#xff08;r&#xff09;&#xff1f;3、一致性級別的對應關系 二、工作流程詳解1、 寫操作的完整流程2、 讀操作的完整流程 三、強一致性的數學原理1、 為什么…

滾珠導軌在醫療設備中有多重要?

在醫療設備領域&#xff0c;穩定性是保障手術安全、提升診斷精度的核心要素。無論是手術機器人精準的器械操作&#xff0c;還是CT掃描儀高速穩定的掃描運動&#xff0c;都離不開背后精密傳動系統的支持。作為線性運動的核心部件&#xff0c;滾珠導軌憑借其獨特的滾動摩擦原理與…

港科ISM選課攻略整理

畢業要求 課程和課程目錄(ISM專業) "D:\HKUST-ISM\prepare\中英Program & Course Catalog.pdf" 課程和課程目錄&#xff08;全部ISOM課程&#xff09; "D:\HKUST-ISM\prepare\全部ISOM Course Catalog.pdf" 兩個可選專業方向 Financial Technolo…

rent8_wechat-最常用出租屋管理系統-微信小程序

rent8_wechat-最常用出租屋管理系統是rent8的微信小程序&#xff0c;需要和rent8配合使用。rent8_wechat基于Tdesign開發。 核心功能 房產管理&#xff1a;新增房產信息、修改房產信息、刪除房產信息。房間管理&#xff1a;新增房間信息、修改房間信息、刪除房間信息、入住管…

OpenCV CUDA模塊設備層---- 絕對值函數abs()

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 這是 OpenCV 的 cv::cudev 模塊中用于 CUDA 設備端&#xff08;device&#xff09;的絕對值函數&#xff0c;專門處理 uchar1 類型&#xff08;即…

IEC61850 通信協議測試驗證方法詳解

一、MMS 協議測試方法 MMS&#xff08;制造報文規范&#xff09;是 IEC61850 中用于設備監控和控制的核心協議&#xff0c;測試需覆蓋以下維度&#xff1a; &#xff08;一&#xff09;協議棧實現驗證 連接管理測試 測試用例&#xff1a;建立和釋放 MMS 連接 100 次&#xf…

關于 Kyber:抗量子密碼算法 Kyber 詳解

一、基本概念 后量子密碼學&#xff08;PQC&#xff09; │ ├──> 是一個領域&#xff08;研究如何在“量子時代”保護數據安全&#xff09; │ └──> Kyber 是這個領域中設計出來的一個“抗量子密碼算法”└──> Kyber 是用于加密密鑰交換的算法&#xff08;叫…

如何保障具身智能系統級安全?鴻道OS給出中國方案

由東土科技自主研發完成的鴻道&#xff08;Intewell&#xff09;工業操作系統正式發布。東土科技董事長李平與該公司全資子公司光亞鴻道總經理鄒露君在接受第一財經等采訪時&#xff0c;解釋了如何通過操作系統為具身智能產業提供底層支撐&#xff0c;解決產業規模化落地的安全…