1. 在Linux下實現進度條程序。 通過makefile進行編譯。 建議自主完成一個彩色的進度條。
寫Makefile文件的原因:Makefile文件的作用是命令行編譯鏈接命令nmake使用的文件。它以人本方式規定了make要編譯哪些文件,生成哪些文件,要鏈接哪些文件,生成的.exe文件的名稱等。
思路:
1. 進度條由0%-100%,在字符數組中輸出一串字符時,最后以”\0”結束的,所以需要一個大小為102的數組,加載橙紅的數據用”=”表示。
2. 進度條會出現一個區間,然后在里面進行加載,故先用”[“”]”表示加載的區間。
3. 定義一個rate標識進度。沒進行一次加一,直到100停止
4. 在進行回車前,需要進行刷新
5. 在加載進度時,通過sleep()&usleep()控制睡眠時間,sleep表示秒,usleep表示微妙。
6. 對于加載中旋轉的小圈通過”-|/”順時針進行。
主要代碼如下
#include #include int main() { int rate =0; char str[102]={0}; char * sta=“-\|/”; while(rate《=100) { str[rate]=“-”; printf(“[%-100s],%d%%,[%c]\r”,str,rate,sta[rate%4]); rate++; ffush(stdout); usleep(100000); } retunr 0; }
Linux下程序編寫完成之后,在進行編譯鏈接生成可執行文件
方式1 gcc test.c -o test
。/a.out
方式2 編譯makefile文件
test:test。o gcc -o test -o test.o test.o:test.s gcc -C test.i -o test.o test.s:test.i gcc -S test.i -p test.i test.i:test.c gcc -E test.c -o test.i .PHONY:clean clean: rm -f test.o rm -f test.s rm -f test.i rm -f test 1.回車(\r)和換行(\n)
回車和換行是兩個不同的概念,回車:表示回到當前行的行首。換行:表示光標進入當前行的下一行
在Linux中,\n會進行回車+換行操作,而/r不會進行回車操作,只會被當做控制字符處理。
在Windows下,每行的結尾是《\n》《\r》;在Linux下,每行的結尾是《\n》。所以,Linux下打開Windows的文件,每行會多出一個^M符號;而在Windows下打開Linux文件,所有的內容變成一行。
2.緩沖區
####(1)什么是緩沖區?
緩沖區又稱為緩存,它是內存空間的一部分,在內存空間中預留了一定的存儲空間,這些空間用來緩沖輸入或輸出的書庫,這部分預留的空間就叫做緩沖區。
緩沖區根據其對應的是輸入涉筆還是輸出設備,分為輸入緩沖區和輸出緩沖區。
(2)為什么要引入緩沖區
比如我們從磁盤里取信息,我們先把讀出的數據放在緩沖區,計算機再直接從緩沖區中取數據,等緩沖區的數據取完后再去磁盤中讀取,這樣就可以減少磁盤的讀寫次數,再加上計算機對緩沖區的操作大大快于對磁盤的操作,故應用緩沖區可大大提高計算機的運行速度。
又比如,我們使用打印機打印文檔,由于打印機的打印速度相對較慢,我們先把文檔輸出到打印機相應的緩沖區,打印機再自行逐步打印,這時我們的CPU可以處理別的事情。
現在您基本明白了吧,緩沖區就是一塊內存區,它用在輸入輸出設備和CPU之間,用來緩存數據。它使得低速的輸入輸出設備和高速的CPU能夠協調工作,避免低速的輸入輸出設備占用CPU,解放出CPU,使其能夠高效率工作。
(3)緩沖區的類型
緩沖區 分為三種類型:全緩沖、行緩沖和不帶緩沖。
a、全緩沖
在這種情況下,當填滿標準I/O緩存后才進行實際I/O操作。全緩沖的典型代表是對磁盤文件的讀寫。
b、行緩沖
在這種情況下,當在輸入和輸出中遇到換行符時,執行真正的I/O操作。這時,我們輸入的字符先存放在緩沖區,等按下回車鍵換行時才進行實際的I/O操作。典型代表是鍵盤輸入數據。
c、不帶緩沖
也就是不進行緩沖,標準出錯情況stderr是典型代表,這使得出錯信息可以直接盡快地顯示出來。
(4)緩沖區的刷新 下列情況會引發緩沖區的刷新: 1、緩沖區滿時; 2、執行flush語句; 3、執行endl語句; 4、關閉文件。 可見,緩沖區滿或關閉文件時都會刷新緩沖區,進行真正的I/O操作。另外,在C++中,我們可以使用flush函數來刷新緩沖區(執行I/O操作并清空緩沖區),如:cout《Linux下呢,有一個萬能的“男人”,我們有什么不懂得,就可以去問這個“男人”,它就是man指令。下面我們以查詢fflush()函數的頭文件來使用man命令查詢,輸入man fflush后按回車鍵,就會出現一個查詢文檔。
2.Linux下軟件安裝的幾種方式
rpm安裝的常用選項
操作符 作用
rpm -ivh full_pkgname 安裝
rpm -e pkgame 卸載
rpm -qa[pkgame] 列出所有已經安裝過的包
rpm -ql pkgame 列出一個已經安裝的包安裝了哪些文件
rpm -qf file 列出某個文件由哪幾個包安裝
rpm -qi file 查詢某個安裝包的詳細信息
rpm -nodeps 強制安裝,不用管其他依賴的包
rpm -force 強制安裝,而不管系統中有沒有安裝過這個包
yum安裝
- yum工具是RedHat公司開發的用于管理rpm包的工具
- 使用yum安裝rpm包可以自動解決包之間的依賴關系
- 我們可以自定義yum的源,可以搭建本地yum倉庫
- yum源配置文件為/etc/yum.repos.d/CentOS-Base.repo
操作符 作用
yum install pkg 安裝rpm包
yum remove pkg 卸載rpm包
yum list 從配置文件中指定的yum源列出所有的rpm安裝包
yum search xxx 搜索rpm包
yum groupinstall grp 安裝rpm組件
yum groupremove grp 卸載rpm組件
yum grouplist 列出所有的rpm組件
yum update/yum upgrade 更新所有的rpm包
搭建本地yum庫
1. 將centos安裝盤或安裝鏡像掛載到指定路徑mnt/
2. 備份好配置文件 /etc/yum.repos.d/CentOS-Base.repo到一個指定路徑
3. 刪除配置文件 /etc/yum.repos.d/CentOS-Base.repo
4. 編輯另一個配置文件 /etc/yum.repos.d/CentOS-Media.repo
[local-cdrom] —-》 yum list 時顯示在最右邊的標識;
name=cd —-》 yum 倉庫標識;
baseurl=file:///mnt/ —-》 指定 rpm 倉庫路徑;
gpgcheck=0 —-》 不檢測;
enabled=1 —-》 允許 ;
5. 保存退出
使用yum只下載不安裝rpm包
1. 先安裝一個插件:yum install -y yum-plugin-downloadonly;
2. 對于未安裝過的 rpm 包:yum install -y pkg –downloadonly;
3. 對于已經安裝過的:yum reinstall -y pkg –downloadonly;
4. 指定 rpm 包的下載路徑:yum install -y pkg –downloadonly –downloaddir dir.
源碼安裝
1. 下載源碼包盡量從官網下載,保證安全
2. 源碼包保存路徑約定為:/usr/local/src/
3. 安裝路徑約定為:/usr/local/源碼包名
4. 安裝開始前,先要查看安裝說明 vim INSTALL vim README
5. 查看配置參數:。/configure –help
6. 安裝過程中,每進行完一步要使用echo $? 進行驗證前一步是否產生錯誤
操作符 作用
。/configure –help 查看所有配置參數及含義
。/configure … 配置安裝路徑、安裝模塊
make 編譯
make install 安裝
echo $! 檢查上一步安裝是否出錯,‘0’:正確;‘1’:錯誤
調研task_struct結構體, 理解結構體中的各個字段的含義
Linux內核通過一個被稱為進程描述符的task_struct結構體來管理進程,
task_struct是Linux中的【進程控制塊PCB結構】的具體數據結構
這個結構體包含了一個進程所需的所有信息。它定義在linux-2.6.38.8/include/linux/sched.h文件中。
下面對task_struct這個結構體 進行各個字段的詳細介紹
1. 調度數據成員 (1) volatile long states;
表示進程的當前狀態:
- TASK_RUNNING:正在運行或在就緒隊列run-queue中準備運行的進程,實際參與進程調度。
- TASK_INTERRUPTIBLE:處于等待隊列中的進程,待資源有效時喚醒,也可由其它進程通過信號(signal)或定時中斷喚醒后進入就緒隊列run-queue。
- TASK_UNINTERRUPTIBLE:處于等待隊列中的進程,待資源有效時喚醒,不可由其它進程通過信號(signal)或定時中斷喚醒。
- TASK_ZOMBIE:表示進程結束但尚未消亡的一種狀態(僵死狀態)。此時,進程已經結束運行且釋放大部分資源,但尚未釋放進程控制塊。
- TASK_STOPPED:進程被暫停,通過其它進程的信號才能喚醒。導致這種狀態的原因有二,或者是對收到SIGSTOP、SIGSTP、SIGTTIN或SIGTTOU信號的反應,或者是受其它進程的ptrace系統調用的控制而暫時將CPU交給控制進程。
- TASK_SWAPPING: 進程頁面被交換出內存的進程。
(2) unsigned long flags;
評論
查看更多