Linux开发初步
Linux開發初步
宗旨:技術的學習是有限的,分享的精神是無限的。
一、庫函數與系統調用
1、系統調用函數和庫函數
庫函數是一些完成特定功能的函數,一般由某個標準組織制作發布,并形成一定的標準。使用庫函數編寫的函數一般可以應用于不同的平臺而不需要做任何修改,具有很好的可移植性。
系統調用函數與操作系統直接相關,不同的操作系統所使用的系統調用可能不太一樣,因此,如果兩個操作系統差異很大,系統調用函數的可移植性就不高。例如windows采用的系統調用的應用程序不能直接在Linux下編譯運行。
之所以使用系統調用是因為系統資源的有限性以及內核管理的方便,系統調用將上層內的應用開發與底層的硬件實現分開,上層應用不需要關注底層硬件的具體實現。Linux的系統調用使用軟中斷實現,使用系統調用后,該程序的狀態將從用戶態切換到內核態。庫函數實現最終也要調用系統調用函數,但它封裝了系統調用操作,從而增加了代碼的可移植性。
?
2、glibc函數庫
C語言本身沒有為常見操作(輸入輸出、內存管理等)提供支持,都是依靠標準函數庫提供。Glibc基于如下標準:
(1)ISO C(ANSI C)
(2)POSIX
(3)Berkeley UNIX:BSD號出爐函數以及套接字。
(4)SVID(System V):進程通信,共享內存
(5)XPG(X/Open可移植性指南)
?
3、系統調用(系統調用時操作系統提供給外部程序的接口)
(1)系統調用函數通常在成功時返回0,失敗是返回非零值。檢查失敗原因,要判斷全局變量errno值,errno中包含錯誤代碼。
(2)許多系統調用的返回數據通常引用參數傳遞。需要在函數參數中傳遞緩沖區地址,而返回的數據就保存在該緩沖區中。
(3)不能認為系統調用比其他函數的執行效率高。——系統調用時一個非常耗時的過程。
?
二、在線文檔
1、man手冊(man man可查看)
man1:命令。可以查看shell終端下命令使用。
man2:系統調用。內核系統調用描述。
man3:庫函數調用。
man4:特殊文件。查看/dev目錄下的特殊文件
man5:文件格式和約定。查看/etc/passwd等文件的格式。man /etc/passwd
man6:游戲。
man7:雜項和約定。
man8:系統管理命令。只有管理員使用的命令。
man9:內核例程。
如: man 1 ls???? man 2 open?? man 3 fread??man 7 man等
2、info手冊——超文本幫助系統(/usr/info)
3、--help
?
三、獲取錯誤信息
? ? ? ? ?調用庫函數和系統調用后,執行成功返回0,或者正確值;執行失敗返回-1,并把系統全局變量errno(errno.h)賦值。所有的錯誤代碼都在errno.h文件中定義。/usr/include/asm/errno.h
為了打印具體的errno'信息,一般使用perror()函數。
void perror(const char * s); // 字符串常量
if(chmod("test02", (stabuf.st_mode& ~S_IXGRP) | S_ISGID) < 0)
{
???perror("stat");
exit(EXIT_FAILURE);
}
?
四、開發環境構成
編輯器:vi/vim,gedit,emacs,nano等【vim配置前面文章已經提到】
編譯器:gcc 【gcc-v】
調試器:gdb
函數庫:glibc
系統頭文件:glibc_header
C開發過程:vim編輯保存為.c文件,gcc編譯成可執行文件,出錯使用gdb調試。
?
五、常用鍵盤組合鍵【stty –a可以查看組合鍵】
ctrl+ c:中斷程序
ctrl+ \:退出程序
ctrl+ S:結束程序
ctrl+ Z:掛起程序
ctrl+ alt + T:打開終端(Ubuntu)
?
六、AStyle在SourceInsight中應用【AStyle插件】
Astyle下載:https://sourceforge.net/projects/astyle/files/astyle/,解壓路徑自己定
配置AStyle格式化代碼工具:Option —— Custom Cmmands —— Add —— 取名AStyle——Run:"D:\ProgramFiles\AStyle\bin\AStyle.exe" -A1 -s2 -p -j -n -c %f
配置格式化快捷鍵:Option —— Menu Assignments —— Menu下拉框選View—— 選右邊的Insert —— 點擊右下角的Key —— 點進Keystrokes中,同時按下鍵盤ctrl + alt + f確定就完成了。
astyle格式化代碼工具可以讓代碼保持整潔有序,非常有效的工具。
總結
- 上一篇: 孪生网络图像相似度_CVPR-2019
- 下一篇: Linux C高级编程——网络编程之包裹