原创 在Linux下實現簡易進度條

本文將要概述 printf的緩衝區問題; \r和\n的區別; 如何實現一個簡易的進度條; 奇怪的現象 進度條是安裝和下載軟件中常見的部分,它可以表示軟件安裝或下載了多大,能給客戶一種直觀的感受,今天我們就來實現一個簡易的進度條

原创 關於文件描述符(file_struct)

什麼是文件描述符 文件描述符(file_struct)是一個非負整數,對於Linux內核而言,爲了高效管理已經被打開的文件所創建的索引,操作系統在每個進程描述符中都提供了文件描述符表,文件描述符表中每個表項都有一個指向已經

原创 Linux 進程通信IPC對象之信號量

什麼是信號量 信號量與其他IPC對象不同,它是一個計數器,用於多個進程對共享數據對象的訪問,它的本質是一種數據操作鎖,它不像消息隊列和管道那樣具有數據交換的功能,而是通過控制其他的通信資源(文件,外部設備)來實現進程間通信。 如何

原创 Linux下的線程控制

首先大家可以看看這篇文章,這篇文章對進程和線程的關係做了生動的講解: http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html 什麼是進程 前面我們學習了

原创 進程管理之程序替換

exec函數族 在Linux中,exec是一個函數族,它一共有6個函數,如下: #include <unistd.h> int execl(const char *path, const char *arg, ...); i

原创 exit函數和_exit函數的區別

高級I/O函數 在Linux標準庫中,有一套稱爲高級I/O函數,例如我們所熟知的printf,fopen,fread,fwrite都在此列,他們也被稱爲緩衝I/O。其特徵是對應每一個打開的文件,都存在一個緩衝區,在每次讀文件時會多

原创 內存描述符mm_struct淺析

什麼是內存描述符 什麼是進程?進程是正在執行的程序,是可執行程序的動態實例,它是一個承擔分配系統資源的實體,但操作系統創建進程時,會爲進程創建相應的內存空間,這個內存空間稱爲進程的地址空間,每一個進程的地址空間都是獨立的! 當

原创 Linux sed的原理和用法

什麼是sed? sed是一種非交互式的流式編輯器,這裏有兩個關鍵字,非交互式和流式 非交互式就是指sed只能夠在命令行下輸入編輯命令來對文本進行編輯,然後在屏幕上查看輸出。 流式是指sed每次只從文件中讀入一行,然後對

原创 初始操作系統中的虛擬內存(上)

本文我們將會提到 物理和虛擬尋址 虛擬內存作爲緩衝工具 頁表 地址翻譯 爲什麼要引入虛擬內存 在一個操作系統中,不同的進程之間都是共享cpu和主存資源的,但是,共享主存會發生一些意想不到的結果,例如當前進程有可能不小心寫

原创 淺析shell的工作原理

本章我們的內容將會介紹Linux中的命令解釋器shell的工作原理 我們還會編寫一個簡單的shell 什麼是shell? Linux系統的shell相當於操作系統的“一層外殼”,它是命令語言解釋器,它爲用戶提供了使用操作系統

原创 面試題OJ:反轉鏈表

反轉鏈表是比較基礎的問題,直接使用暴力法即可,這裏採用了非遞歸和遞歸兩個版本,大家在寫代碼時應該注意要在函數前面檢查指針是否爲NULL的問題,否則很容易會出現空指針的解引用問題: 這裏直接給出代碼,包含測試用例: //面試題:反轉

原创 Linux的gcc和g++的區別

Windows中我們常用vs來編譯編寫好的C和C++代碼;vs把編輯器,編譯器和調試器等工具都集成在這一款工具中,在Linux下我們能用什麼工具來編譯所編寫好的代碼呢,其實Linux下這樣的工具有很多,但我們只介紹兩款常用的工具,

原创 Linux下調試器GDB、makefile的使用

前面的幾篇博客中我們講解了Linux下的編輯器vim、編譯器gcc和g++,今天我們來介紹一下其他常用的三種工具,它們分別是程序調試器:GDB、代碼查看器:ctags、還有一個輔助工程的工具:Makefile 程序調試器:GDB

原创 淺談計算機內存中浮點數的表示

什麼是浮點數 提到浮點數相信大家一定不會很陌生,浮點數表示對形如V=x*(z^y)的有理數進行編碼,它對執行涉及非常大的數字(|V|>>0)和非常接近於0的數字是非常有用的。 浮點數在內存中的存儲 廢話不多述,直接進入正題,首

原创 例說生產者和消費者模型

什麼是生產者和消費者模型 什麼是生產者消費者模型?生產者和消費是操作系統中一種重要的模型,它描述的是一種等待和通知的機制,如下圖。 生產者和消費者模型必須具有的條件 用一句話概括,生產者消費者模型必須具有的條件是三種關係,兩