<form id="dlljd"></form>
        <address id="dlljd"><address id="dlljd"><listing id="dlljd"></listing></address></address>

        <em id="dlljd"><form id="dlljd"></form></em>

          <address id="dlljd"></address>
            <noframes id="dlljd">

              聯系我們 - 廣告服務 - 聯系電話:
              您的當前位置: > 關注 > > 正文

              焦點快看:【Linux操作系統】系統調用和庫函數編程基礎知識

              來源:CSDN 時間:2023-02-07 10:03:17

              Linux操作系統


              (資料圖)

              1、Linux 操作系統編程基礎知識

              1.3 系統調用和庫函數

              1.3.1 接口

              命令接口:以命令形式呈現在用戶面前,方便用戶直接或間接控制自己的作業。程序接口:為應用程序使用系統功能而設置,是應用程序取得操作系統服務的唯一途徑。由一系列系統調用組成,每一個系統調用都是一個能完成特定功能的子程序。圖形接口:采用了圖形化的操作界面,將各種應用程序和文件,直觀、逼真地表示出來。

              1.3.2 系統調用

              系統調用是內核提供的程序接口,是應用程序和硬件設備之間的中間層: 為應用程序提供了系統服務和硬件抽象能力,例如,當需要讀文件時,應用程序可以不管磁盤類型和介質,甚至不用去管文件所在的文件系統到底是那種類型系統調用保證了系統的穩定和安全每個進程都運行在虛擬系統中 Research UNIX系統的第7個版本提供了大給50個系統調用,4.4BSD提供了大約110個,SVR4有大約120個。Linux根據不同的版本有240到260個。man 2 syscalls系統調用和C庫函數之間并不是一一對應的關系,可能幾個不同的函數會調用到同一個系統調用: malloc函數和free函數都是通過sbrk系統調用來擴大或縮小進程的堆??臻g;execl、execlp、 execle、execv、 execvp和execve函數都是通過execve系統調用來執行一個可執行文件 并非所有的庫函數都會調用系統調用,例如,printf函數會調用write系統調用以輸出一個字符串,但strcpy和atoi函數則不使用任何系統調用

              1.4 常用Linux命令

              1.4.1 文件目錄類命令

              命令格式:命令名稱 -選項 參數例:ls -la /etc

              1.4.1.0 總覽

              瀏覽目錄命令:ls、pwd目錄操作命令:cd、mkdir、rmdir瀏覽文件命令:cat、more、less、head、tail文件操作命令:cp、rm、mv、find、grep、tar

              1.4.1.1 瀏覽目錄命令

              1.4.1.1.1 命令名稱:ls

              命令英文原意:list功能描述:顯示目錄文件語法 ls 選項[-ald] [文件或目錄]-a 顯示所有文件,包含隱藏文件-l 詳細信息顯示-d 查看目錄屬性

              1.4.1.1.2 命令名稱:pwd

              命令英文原意:print working directory功能描述:顯示當前所在的工作目錄語法 pwd

              1.4.1.2 目錄操作命令

              1.4.1.2.1 命令名稱:cd

              命令英文原意:change directory功能描述:切換目錄語法 cd [目錄]例子: $ cd /切換到根目錄$ cd ..切換到上一級目錄

              1.4.1.2.2 命令名稱:mkdir

              命令英文原意:make directory功能描述:創建新目錄語法 mkdir [目錄]例子: $ mkdir newdir

              1.4.1.2.3 命令名稱:rmdir

              命令英文原意:remove directory功能描述:刪除空目錄語法 rmdir [目錄名]例子: $ rmdir newdir

              1.4.1.3 瀏覽文件命令

              1.4.1.3.1 命令名稱:cat

              命令英文原意:concatenate and display files功能描述:連接文件并打印導標準輸出設備上選項: -E在每一行的末尾顯示 $-n為顯示行添加行號 參數:指定要連接的文件列表例子: $ cat m1在屏幕上顯示文件m1的內容$ cat m1 m2在屏幕上同時顯示文件m1和m2的內容

              1.4.1.3.2 命令名稱:more

              功能描述:分頁顯示文件內容語法 more [文件名](空格) 或 f 顯示下一頁(Enter) 顯示下一行q或Q 退出 例子: $ more /etc/services

              less命令的用法與more命令類似,也可以用來瀏覽超過一頁的文件。所不同的是less命令除了可以按空格鍵向下顯示文件外,還可以利用上下鍵來卷動文件。

              1.4.1.3.3 命令名稱:head

              功能描述:用于顯示文件前幾行的內容語法 head [參數] <文件名>-n顯示前n行,不指定此參數顯示前10行 例子: [root@linux root]# head /etc/ passwd

              1.4.1.3.4 命令名稱:tail

              功能描述:用于顯示文件后幾行的內容語法 tail [參數] <文件名>-n顯示后n行,不指定此參數顯示后10行+n從第n行顯示到文件尾-F從用于跟蹤顯示不斷增長的文件結尾內容(通常用于顯示日志文件) 例子: [root@linux root]# tail /etc/ passwd

              1.4.1.4 文件操作命令

              1.4.1.4.1 命令名稱:CP

              功能描述:可以將文件從一處復制導另一處。一般在使用cp命令時將一個文件復制成另一個文件或復制導某目錄時,需要指定源文件名與目標文件名或目錄。

              語法 cp [參數] <源文件路徑> <目標文件路徑>

              -p:連同文件的屬性一 起復制,而非使用默認方式,常用于備份-i:若目標文件已經存在時,在覆蓋時會先詢問操作的進行-r:遞歸持續復制,用于目錄的復制行為-u:目標文件與源文件有差異時才會復制

              例子:

              [test@linux test]$ cp test1. txt test2. txt將test1. txt復制成test2. txt[test@linux test]$ cp test3. txt /tmp將test3. txt復制到/ tmp目錄中:[test@linux test]$ cp -r test1(目錄) test2(目錄)目錄拷貝

              1.4.1.4.2 命令名稱:rm

              功能描述:刪除文件或目錄語法 rm [參數] <目標文件路徑>-f:就是force的意思,忽略不存在的文件,不會出現警告消息-i:互動模式,在刪除前會詢問用戶是否操作-r:遞歸刪除,最常用于目錄刪除,它是一個非常危險的參數 例子: [test@linux test]$ rm myfiles (文件名)刪除某個文件[test@linux test]$ rm*刪除當前目錄下的所有文件[test@linux test]$ rm -r myfolder (目錄名)遞歸刪除某個目錄(包含該目錄下所有文件及子目錄)[test@linux test]$ rm-f *.txt強迫刪除所有后綴名為txt文件[test@linux test]$ rm -i *刪除當前目錄下的所有文件(刪除文件時會詢問,可按Y或N鍵表示允許或拒絕刪除文件)

              1.4.1.4.3 命令名稱:find

              功能描述:用來尋找文件或目錄語法 find 路徑 [參數]-name filename:找出文件名為filename的文件-size [+-]SIZE:找出比SIZE還要大(+)或小(-)的文件-tpye TYPE:查找文件的類型為TYPE的文件,TYPE的值主要有:一般文件(f)、設備文件(b、c)、目錄(d)、連接文件(I)、socket (s)、FIFO管道文件§-perm mode:查找文件權限剛好等于mode的文件,mode用數字表示,如0755 例子:

              1.4.1.4.4 命令名稱:grep

              命令英文原意:Globally search a Regular Expression and Print功能描述:在文件中搜索匹配的字符并進行輸出語法 grep [參數] <要找的字串> <要尋找字串的源文件>-a:將binary文件以text文件的方式查找數據-c:計算找到“查找字符串”的次數-i:忽略大小寫的區別,即把大小寫視為相同-v:反向選擇,即顯示出不包含‘查找字符串’內容的那一行 例子:

              1.4.1.4.5 命令名稱:tar

              命令英文原意:tape archive功能描述:命令能夠將用戶所指定的文件或目錄打包成一個文件,也可以通過指定參數開啟壓縮/解壓縮功能語法 格式: tar [參數] <文件>-c:新建打包文件-t:查看打包文件的內容含有哪些文件名-x:解打包或解壓縮的功能,可以搭配-C (大寫)指定解壓的目錄,注意-c,-t,-x不能同時出現在同一條命令中-j:通過bzip2的支持進行壓縮/解壓縮-z:通過gzip的支持進行壓縮/解壓縮-v:在壓縮/解壓縮過程中,將正在處理的文件名顯示出來-f filename:filename為要處理的文件-C dir:指定壓縮/解壓縮的目錄dir 例子: [root@linux test]# tar- cvf test. tar *將當前目錄的所有文件打包成test. tar[root@linux test]# tar -czvf test.tar.gz *將當前目錄的所有文件打包成test. tar,再用gzip命令壓縮[root@linux ljr]# tar -tf test.tar *查看test. tar文件中包括了哪些文件[root@linux test]# tar -xvf test.tar * 將test. tar解打包[root@linux test]# tar- xzvf foo.tar.gz * 將foo. tar. gz解壓縮并解打包

              1.4.2 進程控制類命令

              1.4.2.0 總覽

              查看系統中的進程命令:ps、top控制系統中的進程命令:kill、killall、nice、renice進程后臺運行命令:&進程的掛起和恢復

              1.4.2.1 查看系統中的進程命令

              1.4.2.1.1 命令名稱:tar

              功能描述:ps命令是用來顯示系統瞬間的進程信息,它可以顯示出在用戶輸入ps命令時系統的進程及進程的相關信息。格式: ps [參數]-l:長格式輸出-u:按用戶名和啟動時間的順序來顯示進程-j:用任務格式來顯示進程-f:用樹形格式來顯示進程-a:顯示所有用戶的所有進程(包括其它用戶)-x:顯示無控制終端的進程-r:顯示運行中的進程 例子:

              顯示本用戶的進程:

              查看系統和每位用戶全部進程:

              [pp@host pp]$ ps -aux | grep pp 查找pp用戶的進程

              1.4.2.1.2 命令名稱:top

              功能描述:動態監視系統任務的工具,輸出結果是連續的。格式: top [參數]-b:以批量模式運行,但不能接受命令行輸入-c:顯示命令行,而不僅僅是命令名-d N: 顯示兩次刷新時間的間隔,比如-d 5,表示兩次刷新間隔為5秒-i:禁止顯示空閑進程或僵尸進程-n NUM:顯示更新次數,然后退出。比如-n 5,表示top更新5次數據就退出-p PID:僅監視指定進程的ID,PID是一 個數值-q:不經任何延時就刷新-s:安全模式運行,禁用一些效互指令-S:累積模式,輸出每個進程的總的CPU時間 例子:

              1.4.2.2 控制系統中的進程命令

              1.4.2.2.1 命令名稱:kill

              功能描述:該命令用于向某個進程(通過PID標識)傳送一個信號, 它通常與ps和jobs命令一起使用動態監視系統任務的工具,輸出結果是連續的。格式: kill -signal PID,常用的signal參數如下: 1: SIGHUP:啟動被終止的進程2: SIGINT:相當于輸入ctrl+c,中斷一個程序的進行15: SIGTERM: 以正常的結束進程方式來終止進程17: SIGSTOP:禁相當于輸入ctrl+z,暫停一個進程的進行 例子: kill -SIGTERM %1以正常的結束進程方式來終止第一個后臺工作進程kill -SIGHUP PID重新啟動進程ID為PID的進程

              1.4.2.2.2 命令名稱:killall

              功能描述:killall命令使用進程的名稱來殺死進程,使用此指令可以殺死一組同名進程。使用kill命令可以殺死指定進程PID的進程,如果要根據進程名稱找到需要殺死的進程,還需要在之前使用ps等命令再配合grep來查找進程而killall把這兩個過程合二為一格式: killall [參數] <正在運行的進程名>-e:對長名稱進行精確匹配-I:忽略大小寫的不同-p:殺死進程所屬的進程組-i:交互式殺死進程,殺死進程前需要進行確認-l:打印所有已知信號列表-q: 如果沒有進程被殺死,則不輸出任何信息-r:使用正規表達式匹配要殺死的進程名稱-s:用指定的進程號代替默認信號“SIGTERM"-u:殺死指定用戶的進程 例子: [root@localhost test]# killall game

              1.4.2.2.3 命令名稱:nice

              功能描述:nice 命令允許在默認優先級的基礎上進行增大或減小的方式來運行命令格式: nice [參數]command:是系統中任意可執行文件的名稱-n, --adjustment:指定程序運行優先級的調整值優先級的調整值范圍為-20 ~ 19 ,其中數值越小優先級越高,數值越大優先級越低若nice命令未指定優先級的調整值,則以缺省值10來調整程序運行優先級,既在命令通常運行優先級基礎之上 增加10 例子: [root@host root]# nice -n -5 myprogram& 在后臺以通常運行優先級-5的優先級運行myprogram

              1.4.2.2.4 命令名稱:renice

              功能描述:改變一個正在運行進程的nice值格式: renice [參數]-n:指定程序運行優先級的調整值 例子: [root@host root]# [root@host root ]# renice - -5 777 將正在運行的PID為777的進程nice值改為-5

              1.4.2.3 進程后臺運行命令

              1.4.2.3.1 命令名稱:&

              例子: [root@host root]# cp -r /usr/* test & 將/usr目錄下的所有子目錄及文件復制到/root/test目錄下的工作放到后臺運行

              1.4.3 程序編譯調試方法

              1.4.3.0 總覽

              1.4.3.1 命令名稱:gcc

              功能描述:改變一個正在運行進程的nice值

              格式: gcc [選項] <文件名>

              -o filename:指定輸出文件為filename。該選項不在乎gcc產生什么輸出,無論是可執行文件,目標文件,匯編文件還是預處理后的C代碼 如果沒有使用“-o”選項,默認的輸出結果是:可執行文件為”a.out”,編譯后產生的目標文件是"sourcename.0",匯編文件是“sourcename.s",而預處理后的C源代碼送往標準輸出 -D:宏定義選項,等同于代碼中的#define MACRO,但-D定義的宏作用于所有的源文件。 #define PI 3.14159如果程序用到PI則用3.14159代替gcc -D PI=3.14159 main.c 但如果沒有定義宏的話,就可以直接在編譯的時候賦值再運行 -l:頭文件的搜索路徑,如果用戶的頭文件不在gcc的搜索路徑中,可以用此選項指定額外搜索路徑。 gcc helloworld.c -I /usr/include -o helloworld,將/usr/inlcude加入到文件頭文件的搜索路徑中 警告選項:警告是針對程序結構的診斷信息,程序不一定有錯誤,而是存在風險,或者可能存在錯誤。 所有以-W開頭的選項基本上均可使用-Wno-option來關閉該警告信息,如-Wunused在某個局部變量除了聲明就沒再使用,或者聲明了靜態函數但是沒有定義,或者某條語句的運算結果顯然沒有使用時,編譯器就發出警告。使用-Wno-unused可禁止該警告信息。-w:禁止所有警告信息Wall:打開所有警告選項,輸出警告信息通常建議打開-Wall,這樣至少可以看出你的代碼里有哪些地方可能存在問題 動態鏈接 -library名字為library的動態鏈接庫。事實上此動態鏈接庫在文件系統中的名字為liblibrary.so。連接器會自動加上lib*.so。-Ldir 共享庫搜索目錄。gcc除了會在自定義的目錄中搜索共享庫外,用戶也自定義目錄讓gcc搜索。gcc main.c -0 main -linc -L./

              例子:

              gcc main.c -o main 對于源代碼main.c,可以通過如上命令編譯成最終可執行文件(默認包含了預處理、編譯、匯編及鏈接四個階段)

              gcc -C increase.c -o increase.o把“.c”編譯成“.o”

              ar -r libincrease.a increase.o把“.o”歸檔成靜態庫“.a”

              gcc main.c -L -static -o main靜態庫和其它源文件鏈接成可執行文件

              1.4.3.2 命令名稱:gdb

              gdb是GNU計劃開發的程序調試工具gdb可以完成以下四個方面的功能: 啟動程序,可以按照自定義的要求隨心所欲的運行程序 直接在shell中運行gdb命令,進入gdb界面后用file program裝載程序。在shell中啟動gdb并加載可執行文件gdb用gdb同時調試一個運行程序和core文件(core是程序非法執行后core dump后產生的文件)gdb program core調試正在運行的進程gdb program,進入gdb后用attach調試正在運行的進程。 可讓被調試的程序在所指定的調置的斷點處停?。〝帱c可以是條件表達式) 功能:斷點設置命令break(縮寫b),當gdb執行到該斷點時會讓程序暫停運行。此時程序員可以查看運行中程序的情況。格式:break [LOCATION] [thread THREADNUM] [if CONDITION][LOCATION]linenum (行號)function name(函數名)filename:linenumfilename:functionclass:function (c++ )b 123 b main b increase:main b increase:123[thread THREADNUM]調試多線程程序時,切換到哪個線程或者在那個線程中設置斷點。break frik.c:13 thread 28[if CONDITION]:當條件滿足時,斷點才生效。一般稱為條件斷點。 CONDITION跟C語言一樣,例如b 123 if index==2,當index為2時,程序在123行停下。 watchpoint稱為觀察點,當觀察對象的值有變化時,程序立即停止執行。 watch:為表達式(變量) expr設置一 個觀察點。一旦表達式值有變化時,馬上停住程序。rwatch:當表達式(變量) expr被讀時,停住程序。awatch:當表達式(變量)的值被讀或被寫時,停住程序info watchpoints :列出當前所設置了的所有觀察點。 clear [linenum] [function name]清除所有斷點,不會清除watchpoints。delete清除編號為num的斷點或者watchpoint。disable禁止某個斷點。enable開啟某個斷點。單步調試 step單步調試命令,一次執行一行程序。next單步調試命令,但跳過函數調用。finish單步調試時直接從一個函數中返回disassemble顯示匯編代碼。 堆棧調試 backtrace或者bt查看目前程序的堆棧情況。where查看當前位置。up/down向上或者向下移動一個堆棧。frame或者f移動到第num個堆棧。當移動到某個堆棧時,便可以用gdb命令查看在那個堆棧中的局部變量。

              2、文件和目錄

              3、進程與線程

              4、線程同步與進程間通信

              責任編輯:

              標簽:

              相關推薦:

              精彩放送:

              新聞聚焦
              Top 中文字幕在线观看亚洲日韩