在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Linux環境編程必須搞懂的幾個概念

dyquk4xk2p3d ? 來源:良許Linux ? 2023-02-12 16:57 ? 次閱讀

Linux環境編程對于初學者來說,必須深刻理解重點概念才能更好地編寫代碼,實現業務功能,下面就幾個重要的及常用的知識點進行說明。搞懂這幾個概念后以免在將來的編碼出現混淆。

系統調用

所有的操作系統在其內核里都有一些內建的函數,這些函數可以用來完成一些系統級別的功能。在Linux系統使用的這樣的函數叫做“系統調用”,英文是systemcall。這些函數代表了從用戶空間到內核空間的一種轉換。

系統調用是Linux操作系統提供的服務,是編寫應用程序與內核之間通信接口,也就是我們所說的函數。相對于普通的函數調用來說,系統調用的性能消耗相對來說是大的。所以在程序追求性能的同時,盡量避免系統調用。

用戶態的程序默認是通過棧來傳遞參數的。而對于系統調用來說,內核態和用戶態使用的是不同的棧,這使得系統調用的參數只能通過寄存器的方式進行傳遞。

IO操作

什么是IO,通俗來講就是輸入輸出

IO分為標準IO和文件IO,我們常用的scanf、printf、getchar、putchar、gets、puts這些都是標準輸入輸出。Linux系統下一切皆文件的概念,所以在linux下的編程中對文件的IO操作有標準IO和文件IO兩種操作類型。標準IO是帶緩沖的IO屬于庫函數,文件IO是不帶緩沖的屬于系統調用。

標準IO:

1.標準IO是由ANSIC標準定義

2.跨平臺,可以在windows下運行,也可以在Linux下運行

3.通過緩沖機制來減少系統調用,實現更高的效率

4.文件流 標準IO用結構體類型來存放文件的相關信息,標準IO所有操作圍繞著FILE來操作。

文件IO:

1.文件IO是POSIX提供的一組函數

2.只能運行在可移植操作系統中,不能跨平臺

3.沒有緩沖機制

4.文件描述符是一個非負整數,每打開一個文件,系統會自動分配一個文件描述符(即從系統最小的且沒有被用的描述符來分配)

原子操作

原子在化學課程中是不可再分的顆粒。而對于Linux系統來說所謂原子操作是為了確保對一個整型數據的更改具有排他性。原子操作就是要么不執行,一旦執行就會執行完成,是不可被打斷的一個,或一系列的動作,即在完成任務前不會被其他事件所打斷,就像原子不可被分割成顆粒一樣。單處理中,可以用單條指令完成的指令可以被看成是一個原子操作。軟件中的原子操作依賴于硬件原子操作的支持。當然原子操作,也可以當引用計數使用。

原子操作其實本質上和鎖實現同樣的功能,都是為了保護共享對象,它具有原子性,和順序性。原子性確保指令執行期間不被打斷,要么全部執行,要么根本不執行。而順序性確保即使兩條或多條指令出現在獨立的執行線程中,甚至獨立的處理器上,它們本該執行的順序依然要保持。

線程安全

所謂線程安全,就是指代碼可以在多線程環境下安全地執行,輸出我們想要的結果。即符合正確的邏輯,是程序員期望的正常執行結果。為了實現線程安全,Linux系統提供一些列的方法,或者只能使用局部變量或資源,或者就是利用鎖等同步機制,來實現全局變量或資源的訪問。

線程安全在Linux環境編程中極其重要,我們不僅要了解概念,更重要的是要在實際的編程中學會實現線程安全方式。下面來看一個簡單的例子:

#include
#include
#include

staticintnCnt=0;

void*Thread(void*arg)
{
for(inti=0;i

大家看出上面例子的問題了嗎?

對,沒錯,在此例子中我們創建了兩個線程,線程函數是同一個函數,在線程函數中是對全局變量nCnt的自增操作。這個例子中輸出結果和我們想要的是不一樣,就是因為nCnt執行指令并不是原子的,兩個個線程對nCnt的并發訪問出現了問題。我們利用鎖就可以解決此問題。

阻塞與非阻塞

Linux環境編程中的阻塞與非阻塞,都是指I/O操作。而所有的I/O系統調用默認都是阻塞的。那什么是阻塞?阻塞的系統調用是指當進行系統調用時除非出錯或被信號打斷,那么系統調用將會一直陷入內核態直到調用完成。非阻塞的系統調用是指無論I/O操作成功與否,調用都會立刻返回。阻塞和非阻塞IO是訪問設備的兩種模式,驅動程序可以靈活的支持這兩種用戶空間對設備的訪問方式。

阻塞操作是指在執行操作時,若不能獲得資源,則阻塞進程直到滿足條件再進行操作。被阻塞的進程進入睡眠狀態,被調度器的運行隊列移走,直到等待的條件滿足

非阻塞是指在進行操作時,若不能獲得資源,他要么放棄,要么返回后重新查詢,直到可以進行操作為止。

當數據準備好時二者的模式相同,即IO操作都是將進程阻塞,直到IO操作完成

阻塞、非阻塞是設備文件、網絡文件的屬性

同步與異步

同步與異步,也是指I/O操作。POSIX定義如下:A synchronous I/O operation causes the requesting process to beblocked until that I/O operation completes An asynchronous I/O operation does not cause the requesting processto be blocked

兩者的區別就在于同步IO做IO操作時會將進程阻塞,而異步IO做IO操作時不會阻塞進程

當把阻塞、非阻塞、同步和異步放在一起時,難免會出現混淆。同步是否就是阻塞,異步是否就是非阻塞?實際上在I/O操作中,它們是不同的概念。同步既可以是阻塞的,也可以是非阻塞的,而常用的Linux的I/O調用實際上都是同步的。這里的同步和異步,是指I/O數據的復制工作是否同步執行。

以系統調用read為例。阻塞的read會一直陷入內核態直到read返回;而非阻塞的read在數據未準備就緒時,會直接返回,而當有數據時,非阻塞的read同樣會一直陷入內核態,直到read完成。這個read就是同步的操作, 即I/O的完成是在當前執行流程下同步完成的。如果是異步,則I/O操作不是隨系統調用同步完成的。調用返回后,I/O操作并沒有完成,而是由操作系統或者某個線程負責真正的I/O操作,等完成后通知原來的線程

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 接口
    +關注

    關注

    33

    文章

    8601

    瀏覽量

    151167
  • Linux
    +關注

    關注

    87

    文章

    11304

    瀏覽量

    209524
  • 操作系統
    +關注

    關注

    37

    文章

    6826

    瀏覽量

    123333
  • 編程
    +關注

    關注

    88

    文章

    3616

    瀏覽量

    93738
  • 函數
    +關注

    關注

    3

    文章

    4331

    瀏覽量

    62622

原文標題:Linux環境編程必須搞懂的幾個概念

文章出處:【微信號:良許Linux,微信公眾號:良許Linux】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    分析EMC問題必須掌握的幾個基本概念

    產品的電源線或信號線上。其實質也是共模干擾。與EMC相關的幾個基本概念先舉幾個個例子:1、一個產品帶LED顯示,在考慮EMC設計(主要是ESD)時,我們常常會在LED上并連一個102貼片陶瓷電容。為什么?2
    發表于 12-01 20:41

    C語言編程入門(linux環境)

    消息管理 …………………………………………………………………………39第七章 線程操作 …………………………………………………………………………49第八章 網絡編程 …………………………………………………………………………54第九章 Linux 下 C 開發工具介紹 …
    發表于 12-19 13:57

    Linux平臺搭建與環境熟悉

    環境、系統編程以及網絡編程,熟悉C++、QT編程并且深刻體會整個嵌入式Linux項目開發流程,強化學員對
    發表于 05-19 08:30

    從哪幾個方面入手去學習linux嵌入式編程開發呢

    的疑問,學習時有很多的困難,在這里小編就來讓你們迅速學會linux嵌入式編程開發。linux嵌入式編程開發學習時,你要從這幾個方面來下手,首
    發表于 12-22 08:11

    LINUX環境編程指南資料合集

    資料簡介:第 1 章著重介紹整個 Linux編程環境,包括如何安裝 Linux 系統,以及如何使用 Shell 來操作你的系統,在這一章中還給大家詳細介紹了
    發表于 07-11 15:30

    linux下c語言編程pdf

    linux下c語言編程內容為::基礎知識,進程介紹,文件操作,時間概念,信號處理,消息管理,線程操作,網絡編程,Linux 下C 開發工具介
    發表于 12-08 10:00 ?0次下載

    幾個RT-Linux 源碼

    幾個RT-Linux 源碼
    發表于 01-08 14:27 ?11次下載

    開關電源EMC必須掌握的幾個概念

    開關電源EMC必須掌握的幾個概念
    發表于 01-14 12:13 ?34次下載

    串口編程參考資料 linux環境下的

    串口編程參考資料 linux環境下的
    發表于 10-24 14:39 ?8次下載
    串口<b class='flag-5'>編程</b>參考資料 <b class='flag-5'>linux</b><b class='flag-5'>環境</b>下的

    精通嵌入式Linux編程—構造自己的GUI環境

    精通嵌入式Linux編程—構造自己的GUI環境
    發表于 10-30 09:04 ?16次下載
    精通嵌入式<b class='flag-5'>Linux</b><b class='flag-5'>編程</b>—構造自己的GUI<b class='flag-5'>環境</b>

    LINUX系統教程之如何在Linux系統下進行編程

    本文檔的主要內容詳細介紹的是LINUX系統教程之如何在Linux系統下進行編程主要內容包括了:程序開發過程 ,Linux編程
    發表于 12-18 19:09 ?9次下載

    LINUX環境編程圖文指南的PDF電子書免費下載

    本書從零開始,循序漸進地攻破Linux環境編程所遇到的各級關卡,以圖文并茂的形式幫助讀者理解各個概念。本書內容翔實,囊括了Linux系統操作
    發表于 06-08 08:00 ?0次下載
    <b class='flag-5'>LINUX</b><b class='flag-5'>環境</b><b class='flag-5'>編程</b>圖文指南的PDF電子書免費下載

    關于電磁兼容必須搞懂的幾件事,你了解嗎

    你了解電磁兼容必須搞懂的幾件事嗎?其實,往往在學習電磁兼容的過程中,不能忘記我們的初衷。所以,在學習之前,有些基本要點必須搞懂。下面給大家分享一下實用常識,能對各位工程師有所幫助! 1
    的頭像 發表于 10-30 18:16 ?510次閱讀

    Linux環境編程:從應用到內核

    Linux環境編程:從應用到內核資料下載。
    發表于 06-01 14:51 ?18次下載

    Linux應用編程的基本概念

    Linux應用編程涉及到在Linux環境下開發和運行應用程序的一系列概念。以下是一些涵蓋Linux
    的頭像 發表于 10-24 17:19 ?233次閱讀
    主站蜘蛛池模板: 天天爱天天插| 久久dvd| 2021国产成人午夜精品| 国产精品久久久久久久久免费观看| 日韩怡红院| 1000部啪啪未满十八勿入中国 | chinesevideo普通话对白| 美女三级黄| 免费网站成人亚洲| 奇米狠狠操| 成年大片免费播放视频人 | 啪啪免费网站| 天堂网在线最新版官网| 激情六月综合| 国产大片黄在线观看| 亚洲欧美婷婷| 成人国产日本亚洲精品| 欧洲另类一二三四区| 色尼玛亚洲综合| 婷婷视频网站| 国产精品高清免费网站| 久久久夜色精品国产噜噜| 久久精品免费看| 亚洲产国偷v产偷v自拍色戒| 成 人 免 费 黄 色| 免费人成网ww44kk44| 日日噜噜噜夜夜爽爽狠狠视频| 忘忧草爱网| 69re在线观看| 爱婷婷网站在线观看| 国产精品爱啪在线线免费观看| 日本网站黄色| 欧美操bb| 四虎永久免费网站免费观看| 夜夜gan| 最近2018年中文字幕大全一| 国产一区二卡三区四区| 好爽好紧好大的免费视频国产 | 欧美成人观看免费全部完小说| 女同在线视频| 四虎影院在线视频|