編程linux系統
❶ Linux系統編程學習筆記——進程間的同步:信號量、互斥鎖、信號
Linux系統編程學習筆記——進程間的同步:信號量、互斥鎖、信號信號量: 用途:用於同步進程或線程間的動作。 內核維護:一個整數,其值限制為大於等於0。 操作:可執行增減值操作,這些操作可能導致進程阻塞。 類型: 未命名信號量:位於內存共享區域,通過sem_post喚醒阻塞進程,sem_wait阻塞當前進程。若用於進程間,需置於共享內存上,使用mmap函數映射。 命名信號量:擁有唯一名字,通過sem_open函數創建並訪問,可用於進程間通過名字共享信號量實現同步。 注意事項:信號量的初始值會影響進程的執行流程。
互斥鎖: 用途:用於任務間的同步。 功能:確保共享資源在訪問時只有一個線程執行,側重於加鎖和解鎖狀態。 應用:主要應用於線程之間,通過互斥鎖實現共享資源的訪問控制,避免並發修改問題。
信號: 用途:事件通知機制,內核、其他進程或自身可向進程發送信號。 處理:接收信號後,進程可選擇忽略、掛起或在特定信號處理函數後恢復執行。 應用: 通過kill命令向進程發送信號,影響進程的執行流程。 創建父子進程時,子進程可以定期列印信息,父進程可以延遲後殺死子進程,或通過指定信號處理函數實現更復雜的進程間交互。 信號處理函數用於響應特定信號,如中斷或異常情況處理。
以上是對Linux系統編程中進程間同步的三種機制——信號量、互斥鎖和信號的簡要總結。
❷ Linux系統編程【1】——編寫more命令
接觸Linux近一年,理論知識與實操並行,從操作系統基礎知識到內核編譯、信息安全實踐、雲伺服器部署,我渴望深入理解其底層機制,將理論知識落地實踐,因此開啟這一系列博客。
系統編程,簡而言之,即是「編寫操作系統」,它與普通編程的關鍵區別在於操作系統的功能調用。普通程序通過系統提供的介面完成任務,而系統編程則直接管理硬體資源,實現底層功能的調用。操作系統作為幕後英雄,默默地將復雜操作簡化為穩定服務。
more命令作為Linux下常用工具,其核心功能在於分屏顯示文件內容。通過「man more」命令可查看詳細使用說明,執行形式為more [options] file...,其中file為要顯示的文件名。
在C語言環境中實現more命令,首先需理解main函數參數。通常參數為空,但在實際應用中包含兩個參數:argc表示傳遞的參數個數,argv[]則為指向字元串的指針數組。argv[0]為自身運行目錄路徑和程序名,argv[1]為第一個參數,以此類推,這樣可以直接獲取文件名用於後續操作。
在實現more命令時,主要步驟包括:打開文件、讀取顯示文件內容、處理用戶輸入。通過fopen函數打開目標文件,讀取文件內容後顯示,並等待用戶操作。處理用戶輸入則通過判斷輸入,返回不同的操作結果。
初版more命令實現雖能顯示文件內容,但與實際功能存在差異。通過改進,可實現與真正more命令相似的體驗,如加入環境變數配置,將自編譯的可執行文件放入環境變數路徑下,如/bin,這樣即可直接輸入命令執行。
實現more命令過程中,發現許多功能依賴於已有的庫函數,如fopen,而非從零構建。這表明在不同層次的編程中,問題的側重點不同,但總體目標仍是深入理解Linux系統。
雖然改進後的more命令功能有所增強,但仍與真正more命令存在差距,如文件類型、許可權檢查等高級功能尚未實現。在實現過程中,對Linux底層機制有了更深入的理解,認識到不同層次編程間的關聯。
總結而言,通過實現more命令,不僅加深了對Linux系統編程的理解,也學會如何利用現有庫函數提高編程效率。未來,期待在更多Linux系統編程中探索與實踐。