linux多線(進)程編程——(1)前置知識

liunx多線程編程(前置知識)前置知識

前言

學習編程就像是修仙,分為宗門的正統修士(計算機專業的學生),以及野修(半路轉碼)。正統修士有各大宗門的功法,保證一路修行暢通無阻。而對于野修,少部分人可以得到失落的傳承(學習路線),大部分的野修都走了歪路子,對著網站的的某些某某語言基礎教學視頻學習了大半年,最后根基不穩,在與人斗法(面試找工作)的過程中凄慘落敗。
僅僅學習了語言的修士相當于練氣境界,相當于低階修士,而對于這些練氣圓滿的修士來說下一步該怎么做至關重要。數據結構是一種路線,修煉出來必成一方大能,但是那條路線過于兇險,對天資有這極大的要求。今天我們要走了是一條風險較小但也能幫助各位問鼎修真界的一條路線,即《linux操作系統》。

當前境界

(為什么要學習linux?因為學習Linux可以幫助我們更好地理解操作系統的工作原理,提高系統的運行效率和安全性。)

Linux,一般指GNU/Linux(單獨的Linux內核并不可直接使用,一般搭配GNU套件,故得此稱呼),是一種免費使用和自由傳播的類UNIX操作系統,其內核由林納斯·本納第克特·托瓦茲(Linus Benedict Torvalds)于1991年10月5日首次發布,它主要受到Minix和Unix思想的啟發,是一個基于POSIX的多用戶、多任務、支持多線程和多CPU的操作系統。它支持32位和64位硬件,能運行主要的Unix工具軟件、應用程序和網絡協議。
linux操作系統

文件

首先我要向各位道友介紹本條路線的核心心法口訣:“萬物皆文件”。
(暫時編不下去了,說干貨)
linux中文件是一個非常重要的概念,電腦相當于我們的軀體,而我們的每一寸血肉都可以稱為文件。在電腦上,各種外設類似于硬盤,鼠標,鍵盤等,都可以是文件。這個概念還有一點抽象,大家先記住,隨著修為的加深,我們就會理解這個概念的。

想一想我們能對一份文件干什么?無非是下面幾個動作,打開文件,關閉文件,讀文件,寫文件。對于這四個操作,linux提供了對應的函數。

打開文件:

/*
參數:pathname: 文件路徑,不必多說flags:打開方式 O_RDONLY:只讀模式O_WRONLY:只寫模式O_RDWR:可讀可寫。。。(其他的先不管了)mode:只有flags是一個特定值時這個參數才有意義,先不管了
返回值:fd:int類型,值為-1時表示打開失敗值為大于0的數時表示文件的描述符
*/
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode)

這里的返回值 fd 叫做文件描述符,想一下,我打開文件后如何表示這個文件呢?文件描述符就代表了一個身份證的作用,表示了這個文件的身份,之后我們直接使用這個描述符就可以操作這個文件。這種用一個數字代表一個結構的用法在linux中十分常見,大家要習慣。
可以有多個文件描述符指向同一個文件,這些描述符可以帶有不同的權限,對同一個文件實現不同的操作。例如通過描述符fd1只能從文件中讀取數據,而描述符fd2可以向文件末尾追加數據。

關閉文件:

/*
參數:fd:文件描述符
返回值:值為-1表示關閉失敗值為0表示關閉成功
*/
int close(int fd);

這里就用到了文件描述符,我要關閉剛剛打開的文件,就用文件描述符代表這個文件就行。

向文件中寫入(重點):

/*
參數:fd:文件描述符buf:緩沖區,存放了你要寫入的內容count:要寫入的字節數(size_t就是unsigned int)
返回值:表示成功寫入的字節數值為-1時表示寫入失敗(ssize_t就是int,因為要用-1表示寫入失敗)
*/
ssize_t write(int fd, const void *buf, size_t count);

從文件中讀取(重點):

/*
參數:fd:文件描述符buf:緩沖區,存放讀取到的內容count:要讀取的字節數(size_t就是unsigned int)
返回值:表示成功讀取到的字節數
*/
ssize_t read(int fd, void *buf, size_t count);

小結

在這里我先不給大家上實際案例,后面會給大家用更加具體的方式進行演示。
本節我們要:
1、文件描述符的概念(不要與文件標識符混淆)
2、認識這四個函數( 先不要求會用,重點記住read()和write() )

下一集:linux多線(進)程編程——(2)身外化身fork()

結束語

下一節我們將正式進入linux多進程/多線程編程
祝各位道友早日神功大成!

在這里插入圖片描述
恭喜你點亮了新的技能樹,目前的你眼前有兩個選擇,到底走那邊呢?(其實走哪都是一樣的,我說了算,哈哈!)

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

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

相關文章

Npfs!NpFsdCreate函數分析之從NpCreateClientEnd函數分析到Npfs!NpSetConnectedPipeState

第一部分: 1: kd> g Breakpoint 5 hit Npfs!NpFsdCreate: baaecba6 55 push ebp 1: kd> kc # 00 Npfs!NpFsdCreate 01 nt!IofCallDriver 02 nt!IopParseDevice 03 nt!ObpLookupObjectName 04 nt!ObOpenObjectByName 05 nt!IopCreateFile 06…

【軟件測試】bug 篇

本章思維導圖: 1. 軟件測試的生命周期 軟件測試貫穿于整個軟件的生命周期 流程階段需求分析測試計劃測試設計/開發測試執行測試評估上線運行維護具體工作內容1. 閱讀需求文檔 2. 標記可測試需求 3. 確定測試類型1. 制定測試范圍 2. 選擇測試工具 3. 分配資源1. 編寫…

「Unity3D」圖片導入選項取消Read/Write,就無法正確顯示導入大小,以及Addressable打包無法正確顯示的問題

如果在Edit -> Project Settings -> Editor中的“Load texture data on demand”勾選,就會讓圖片導入設置中,不勾選Read/Write,就無法正確顯示紋理的大小數字。 更進一步的問題是,使用Addressable打包的時候, 如…

《MySQL從入門到精通》

文章目錄 《MySQL從入門到精通》1. 基礎-SQL通用語法及分類2. 基礎-SQL-DDL-數據庫操作3. 基礎-SQL-DDL-表操作-創建&查詢4. 基礎-SQL-DDL-數據類型及案例4.1 數值類型4.2 字符串類型4.3 時間和日期類型 5. 基礎-SQL-DDL-表操作-修改&刪除5.1 DDL-表操作-修改5.2 DDL-表…

Vccaux_IO在DDR3接口中的作用

一、Vccaux_IO在DDR3接口中的作用 1.vccaux_io通常為FPGA的IO bank的輔助電源,用于支持特定電壓的IO標準 2.在DDR3接口中,FPGA的IO bank需要DDR3芯片的電壓(1.5v/1.35v)匹配 3.Vccaux_IO用于為FPGA的DDR3接口I/O Bank供電,其電壓值、噪聲和穩…

深入理解Apache Kafka

引言 在現代分布式系統架構中,中間件扮演著至關重要的角色,它作為系統各組件之間的橋梁,負責處理數據傳遞、消息通信、負載均衡等關鍵任務。在眾多中間件解決方案中,Apache Kafka憑借其高吞吐量、低延遲和可擴展性,已…

【NLP】 21. Transformer整體流程概述 Encoder 與 Decoder架構對比

1. Transformer 整體流程概述 Transformer 模型的整個處理流程可以概括為從自注意力(Self-Attention)到多頭注意力,再加上殘差連接、層歸一化、堆疊多層的結構。其核心思想是利用注意力機制對輸入進行并行計算,從而避免傳統 RNN …

路由器端口映射的意思、使用場景、及內網ip讓公網訪問常見問題和解決方法

一、端口映射是什么意思 端口映射是將內網主機的IP地址端口映射到公網中,內部機器提供相應的互聯網服務。當異地用戶訪問該這個端口時,會自動將請求映射到對應局域網內部的機器上。 二、端口映射常見使用場景 1,遠程訪問需求。當有…

GEO全域優化白皮書:盈達科技如何打造AI生態中的認知護城河

副標題:讓內容被AI優先引用,占領生成式引擎的“主屏入口” 一、GEO:生成式引擎時代的內容占位權之戰 隨著ChatGPT、Kimi、DeepSeek等生成式AI快速成為信息獲取的主流方式,搜索邏輯正在根本性改變:從“網頁排名”轉向“…

如何用DeepSeek大模型提升MySQL DBA工作效率?實戰案例解析

如何用DeepSeek大模型提升MySQL DBA工作效率?實戰案例解析 MySQL DBA(數據庫管理員)的工作涉及數據庫監控、SQL優化、故障排查、備份恢復等復雜任務,傳統方式依賴手動操作和經驗判斷,效率較低。而DeepSeek大模型可以結…

系統設計思維的討論

我們經常說自己熟悉了spring,能夠搭建起一個項目基本框架,并且在此之上進行開發,用戶or客戶提出需求碰到不會的百度找找就可以實現。干個四五年下一份工作就去面試架構師了,運氣好一些可能在中小公司真的找到一份架構師、技術負責…

項目部署-(二)Linux下SpringBoot項目自動部署

一、項目部署架構 二、項目部署環境 192.168.138.100(服務器A): -Nginx :部署前端項目、配置反向代理 -MySQL:主從復制結構中的主庫 192.168.138.101(服務器B): -JDK:運行Java項目 -Git:版本控制工具 -Maven:項目構建…

【LeetCode 熱題 100】哈希 系列

📁1. 兩數之和 本題就是將通過兩層遍歷優化而成的,為什么需要兩層遍歷,因為遍歷 i 位置時,不知道i-1之前的元素是多少,如果我們知道了,就可以通過兩數相加和target比較即可。 因為本題要求返回下標&#xf…

【Kubernetes基礎】--查閱筆記1

目錄 Kubernetes 是什么為什么要用 KubernetesKubernetes 概念MasterNodePodLabelReplication ControllerDeploymentHorizontal Pod AutoscalerStatefulSetService服務發現機制 JobVolumePersistent VolumeNamespaceConfigmap Kubernetes 是什么 Kubernetes是一個開放的開發平…

卷積神經網絡CNN到底在卷些什么?

來源: 卷積神經網絡(CNN)到底卷了啥?8分鐘帶你快速了解!_嗶哩嗶哩_bilibili卷積神經網絡(CNN)到底卷了啥?8分鐘帶你快速了解!共計2條視頻,包括:卷…

Axios 的 POST 請求:QS 處理數據的奧秘與使用場景解析

在現代前端開發中,Axios 已經成為了進行 HTTP 請求的首選庫之一,它的簡潔易用和強大功能深受開發者喜愛。當使用 Axios 進行 POST 請求時,我們常常會遇到一個問題:是否需要使用 QS 庫來處理請求數據?什么時候又可以不用…

java面試題帶答案2025最新整理

文章目錄 一、java面試題集合框架1. 請簡要介紹 Java 集合框架的體系結構2. ArrayList 和 LinkedList 的區別是什么3. HashMap 的工作原理是什么,它在 JDK 7 和 JDK 8 中有哪些不同4. 如何解決 HashMap 的線程安全問題5. TreeSet 是如何保證元素有序的 二、java面試…

4.B-樹

一、常見的查找方式 順序查找 O(N) 二分查找 O(logN)(要求有序和隨機訪問) 二叉搜索樹 O(N) 平衡二叉搜索樹(AVL樹和紅黑樹) O(logN) 哈希 O(1) 考慮效率和要求而言,正常選用 平衡二叉搜索樹 和 哈希 作為查找方式。 但這兩種結構適合用于…

CTF--shell

一、原題 (1)提示: $poc"a#s#s#e#r#t";$poc_1explode("#",$poc);$poc_2$poc_1[0].$poc_1[1].$poc_1[2].$poc_1[3].$poc_1[4].$poc_1[5]; $poc_2($_GET[s]) (2)原網頁:一片空白什么都…

基于51單片機的正負5V數字電壓表( proteus仿真+程序+設計報告+講解視頻)

基于51單片機的正負5V數字電壓表( proteus仿真程序設計報告講解視頻) 仿真圖proteus7.8及以上 程序編譯器:keil 4/keil 5 編程語言:C語言 設計編號:S0101 1. 主要功能: 設計一個基于51單片機數字電壓表 1、能夠…