Day04_C語言IO進程線程

01.思維導圖

02.創建一個分支線程,在主線程中拷貝文件的前一部分,主線程拷貝文件的后一部分

#include <25051head.h>
void* callback(void *arg)
{off_t size=*(off_t*)arg;//打開一個文件讀//打開一個文件寫int fd_r2=open("./my.txt",O_RDONLY);int fd_w2=open("./my2.txt",O_WRONLY|O_CREAT|O_TRUNC,0777);if(fd_r2==-1||fd_w2==-1){printf("open_error2");}//分支線程拷貝lseek(fd_r2,size/2,SEEK_SET);lseek(fd_w2,size/2,SEEK_SET);char buf;for(int i=size/2;i<size;++i){read(fd_r2,&buf,1);write(fd_w2,&buf,1);}printf("子線程后半部分拷貝結束..\n");//關閉文件描述符close(fd_r2);close(fd_w2);//結束調用者線程pthread_exit(NULL);}int main(int argc, const char *argv[])
{//打開一個文件讀//打開一個文件寫int fd_r=open("./my.txt",O_RDONLY);int fd_w=open("./my2.txt",O_WRONLY|O_CREAT|O_TRUNC,0777);if(fd_r==-1||fd_w==-1){ERRLOG("open_error");}//計算文件大小off_t size=lseek(fd_r,0,SEEK_END);//創建線程pthread_t threadid;if(0!=(errno=pthread_create(&threadid,NULL,callback,&size))){ERRLOG("pthread_create_error");}printf("threadid=%ld pthread_create_success..\n",threadid);//設置分離態//pthread_detach(threadid);//設置幾秒鐘分支線程去死sleep(3);//設置不阻塞pthread_join(threadid,NULL);//主線程拷貝lseek(fd_r,0,SEEK_SET);lseek(fd_w,0,SEEK_SET);//循環讀取size/2次,每次讀取一個字符char buf;for(int i=0;i<size/2;++i){read(fd_r,&buf,1);write(fd_w,&buf,1);}printf("前半部分拷貝結束..\n");//關閉文件描述符close(fd_r);close(fd_w);return 0;
}

03.解讀代碼

#include <25051head.h>
int main(int argc, const char *argv[])
{pid_t pid1,pid2;if((pid1=fork())==0)//子進程1{printf("info1 from child process_1\n");sleep(1);printf("info2 from child process_1");_exit(0);}else//主線程或者錯誤<0||>0{if((pid2=fork())==0)//子線程2{   sleep(4);printf("info from child process_2");fflush(stderr);_exit(0);}else{//主線程或者錯誤<0||>0                             wait(NULL);printf("info1 from parent process\n");exit(0);}}return 0;
}

輸出結果:
info1 from child process_1
info1 from parent process
解析過程:

04.解讀代碼, - 打印多少次

#include <25051head.h>
int main(int argc, const char *argv[])
{for(int i=0;i<3;i++){fork();printf("打印次數%d:",i);printf("-\n");                    }return 0;
}

輸出結果:打印次數為:14
解析過程:

  1. 第一次循環(i = 0):
    主進程調用 fork(),創建一個子進程。此時有 2 個進程,每個進程都會執行后續的 printf 語句,所以打印 2 次。
  2. 第二次循環(i = 1):
    上一步的 2 個進程各自調用 fork(),創建 2 個子進程,此時共有 4 個進程,每個進程都會執行后續的 printf 語句,所以打印 4 次。
  3. 第三次循環(i = 2):
    上一步的 4 個進程各自調用 fork(),創建 4 個子進程,此時共有 8 個進程,每個進程都會執行后續的 printf 語句,所以打印 8 次。

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

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

相關文章

金牛區數字文創夢工廠:國際數字影像產業園的先行服務

在金牛區數字文創夢工廠的實踐中&#xff0c;先行服務作為創新引擎&#xff0c;為企業提供預啟動階段的全方位支持。其核心理念是通過前置化咨詢和資源整合&#xff0c;降低試錯成本&#xff0c;賦能產業升級。 先行服務的三大核心優勢 通過主動介入項目啟動前環節&#xff0…

使用RSA對網址url欄加密以及二維碼的網址內容加密

JSEncrypt 庫 &#xff1a; - 引入了 jsencrypt/bin/jsencrypt.min - 需要在項目中安裝 jsencrypt 包 npm install jsencrypt import JSEncrypt from jsencrypt/bin/jsencrypt.min// 密鑰對生成 http://web.chacuo.net/netrsakeypairconst publicKey MFwAAQconst privateKe…

如何用 Kafka Manager 實現 Kafka 集群全面監控

1. 前言:為什么需要 Kafka 集群監控? Apache Kafka 是現代大數據架構中不可或缺的組件,廣泛用于日志收集、流處理、消息隊列等場景。隨著 Kafka 集群規模的增長和業務復雜度的提升,對 Kafka 的實時監控變得尤為重要。 1.1 Kafka 在大數據架構中的核心地位 Kafka 被廣泛應…

MyBatis架構原理解析:核心對象與執行流程深度剖析

一、開篇&#xff1a;理解MyBatis的核心價值 在當今Java持久層框架生態中&#xff0c;MyBatis憑借其靈活的SQL控制能力和簡潔的ORM實現成為企業級應用的首選。與JPA的全自動ORM不同&#xff0c;MyBatis采用半自動化映射理念&#xff0c;在保持SQL靈活性的同時&#xff0c;通過…

移遠通信攜手高通:以全棧車載解決方案,共繪智能出行新藍圖

6月26日至27日&#xff0c;2025高通汽車技術與合作峰會于蘇州盛大舉辦。本次峰會以 “我們一起&#xff0c;行穩智遠” 為主題&#xff0c;全方位呈現智能汽車全棧技術、全產業鏈生態與全場景體驗。作為高通長期穩定的戰略合作伙伴&#xff0c;移遠通信攜全棧車載智能解決方案深…

拿來就能用的python 課程 1

拿來就能用的python 課程 引言 python是很多人入門計算機語言的首選。 但是繁文縟節&#xff0c;很多人從怎么裝python開始學起&#xff0c;然后python計算&#xff0c;然后什么是函數&#xff0c;然后什么是類&#xff0c;然后就因為太難放棄了。&#xff08;說的是不是你&a…

openssh-server

默認地&#xff0c;Ubuntu桌面版不帶SSH服務器 1 檢查服務是否存在 ls /usr/sbin/sshd2 安裝服務 apt install openssh-server3 關閉防火墻 ufw disable 4 啟動服務 service ssh start

html虛擬滾動,解決dom渲染過多卡頓的問題

<!DOCTYPE html> <html lang"zh"><head><meta charset"UTF-8" /><title>極簡虛擬滾動</title><style>.container {width: 300px;height: 300px;border: 1px solid #ccc;overflow: auto;position: relative;}.pl…

華銳互動:全方位定制化 VR 內容制作服務流程剖析?

華銳互動始終堅持以客戶為中心&#xff0c;為客戶提供全方位、定制化的 VR 內容制作服務。從項目的最初階段開始&#xff0c;華銳互動就會深入了解客戶的需求和目標&#xff0c;與客戶進行充分的溝通和交流&#xff0c;挖掘項目背后的故事和文化內涵&#xff0c;然后根據客戶的…

50天50個小項目 (Vue3 + Tailwindcss V4) ? | DragNDrop(拖拽占用組件)

&#x1f4c5; 我們繼續 50 個小項目挑戰&#xff01;—— DragNDrop組件 倉庫地址&#xff1a;https://github.com/SunACong/50-vue-projects 項目預覽地址&#xff1a;https://50-vue-projects.vercel.app/ 使用 Vue 3 的 Composition API 和 <script setup> 語法結合…

springboot應用即使使用了連接池,MySQL數據庫仍然有大量sleep狀態的連接

springboot應用即使使用了連接池&#xff0c;MySQL數據庫仍然有大量sleep狀態的連接 問題背景概念理解MySQL配置參數wait_timeout概念Hikari配置參數&#xff08;項目使用hikari作為數據庫連接池&#xff09; 實踐出真知總結和解決思路 問題背景 近期客戶生產環境報&#xff1…

windows下安裝和使用git

本文為windows下git的下載安裝和使用。 git下載和安裝 參考&#xff1a; windows安裝git&#xff08;全網最詳細&#xff0c;保姆教程&#xff09;-CSDN博客 【學了就忘】Git介紹 — 4.Git的安裝 - 簡書 先解決下載時的一些疑惑&#xff1a; 選擇哪個架構&#xff1f; 電腦ARM6…

借助工具給外語視頻加雙語字幕的實用指南?

給外語視頻配上雙語字幕&#xff0c;能讓不同語言背景的觀眾更輕松理解內容&#xff0c;也能讓視頻在傳播時更受歡迎。現在有不少智能工具能幫我們高效完成這項工作&#xff0c;比如 ViiTor AI 平臺&#xff0c;它在處理雙語字幕方面有不少實用功能&#xff0c;下面就結合其功能…

Claude 4 與 Gemini 2.5 Pro:開發者深度比較

Claude 4 與 Gemini 2.5 Pro&#xff1a;開發者深度比較 在使用相同的編碼挑戰對Claude Sonnet 4和Gemini 2.5 Pro Preview進行廣泛的正面測試后&#xff0c;我發現了每個開發人員都應該了解的顯著性能差異。我的發現揭示了執行速度、成本效率以及最重要的&#xff0c;精確執行…

怎么進入9870端口

在實驗時想進入9870端口查看safe狀態 但是輸入localhost:9870后顯示&#xff1a; 首先使用jps確認hadoop狀態&#xff1a; 從 jps 的輸出來看&#xff0c;Hadoop 的核心服務&#xff08;NameNode、DataNode、ResourceManager、NodeManager 等&#xff09;都已經正常運行&…

Windows、Linux、macOS 三大系統安裝 Git 的常見坑點及解決方案,附帶 具體操作示例,幫助新手快速避坑

以下是 Windows、Linux、macOS 三大系統安裝 Git 的常見坑點及解決方案,附帶 具體操作示例,幫助新手快速避坑。 一、Windows 系統安裝 Git 1. 安裝路徑含空格或中文 坑點:默認路徑 C:\Program Files\Git 可能導致某些腳本報錯。 解決:自定義路徑(如 D:\DevTools\Git)。…

OpenAI最新 GPT-4.1 、 GPT-4.1 mini 和 GPT-4.1 nano 新模型如何在ChatGPT付費創作系統平臺對接API使用

GPT-4.1 ?是 OpenAI 于2025年4月15日發布的最新語言模型系列&#xff0c;包括 GPT-4.1 、 GPT-4.1 mini 和 GPT-4.1 nano 三款新成員。這些模型在編程、指令遵循和長上下文理解方面表現出色&#xff0c;支持最大可達100萬個Token的上下文窗口&#xff0c;適用于處理復雜任務和…

計算機網絡(三)傳輸層TCP

目錄 一、TCP概述? 二、TCP三大核心特性 三、 對比UDP?? &#xff08;1&#xff09;TCP、UDP對比 &#xff08;2&#xff09;TCP、UDP頭部格式: &#xff08;3&#xff09;應用場景 ? 四、TCP的三次握手、四次揮手 &#xff08;1&#xff09;三次握手&#xff08;建…

Spring、SpringBoot 本身為什么不提供 Bean 的異步初始化

這是一個很有深度的架構問題&#xff01;Spring/Spring Boot 本身為什么不直接提供 Bean 的異步初始化&#xff1f; 下面從原理、歷史、設計哲學、技術挑戰、社區現狀等多個層面為你詳細分析。 一、Spring Bean 初始化的默認行為 Spring IoC 容器在啟動時&#xff0c;會同步地…

第十三節:Vben Admin 最新 v5.0 (vben5) + Python Flask 快速入門 - 接口操作審計日志功能

Vben5 系列文章目錄 ?? 基礎篇 ? 第一節:Vben Admin 最新 v5.0 (vben5) + Python Flask 快速入門 ? 第二節:Vben Admin 最新 v5.0 (vben5) + Python Flask 快速入門 - Python Flask 后端開發詳解(附源碼) ? 第三節:Vben Admin 最新 v5.0 (vben5) + Python Flask 快速入…