linux c语言 ppt,linux操作系统下c语言编程入门.ppt
linux操作系統下c語言編程入門.ppt
Linux操作系統下C語言編程入門 CNT Linux操作系統簡介基礎知識進程介紹文件操作時間概念消息管理線程操作網絡編程Linux下C開發工具介紹 一 Linux操作系統簡介 發展歷史1969年 KenThompson UNIXMINIX1991年 芬蘭赫爾辛基大學LINUS現狀和前景大型計算機系統 PC 手持電腦主要特點多用戶 多任務 穩定性 安全性 開放性 網絡功能應用領域Internet WEB FTP 郵件 DNS服務器 TCP IP路由 防火墻 LAN 嵌入式系統 辦公桌面發行版本RedHat Debian 紅旗 二 基礎知識 源程序的編譯gcc編譯器g 編譯器例 gcc ohellohello cg g ohello ohello cpp編寫makefile文件對某個Project編譯時 需要編寫makefile文件 一般的格式是 Target components 依賴關系 TABrule 規則 makefile有三個非常有用的變量 分別是 代表目標文件 代表所有的依賴文件 代表第一個依賴文件的名稱 Makefile實例 ThisisthemakefileCC g CFLAG Wall OplcMain src main cppobj com oobj msgware oobj process oobj rtu oobj lmasrtu oobj schedule oobj rs232 oobj linkcheck oobj msgqueue oobj ping oobj pid oobj paramfile o CC CFLAG lpthread o src main cppobj com oobj msgware oobj process oobj rtu oobj lmasrtu oobj schedule oobj rs232 oobj linkcheck oobj msgqueue oobj ping oobj pid oobj paramfile oobj com o src Communication cpp CC CFLAG c o obj msgware o src MsgWare cpp CC CFLAG c o clean rm fr o 程序的調試打印調試GDB調試頭文件和系統求助man例 manwriteman2write 2 表示我們用的write函數是系統調用函數 3 表示函數是C的庫函數 三 進程介紹 進程的概念程序和進程程序是一個包含可以執行代碼的文件 是一個靜態的文件 而進程是一個開始執行但是還沒有結束的程序的實例 就是可執行文件的具體實現 當程序被系統調用到內存以后 系統會給程序分配一定的資源 內存 設備等等 然后進行一系列的復雜操作 使程序變成進程以供系統調用 進程的狀態新建 運行 阻塞 就緒和完成 進程的標志為了區分各個不同的進程 系統給每一個進程分配了一個ID 系統調用getpid函數可以得到進程的ID 而調用getppid函數可以得到父進程 創建調用該函數進程的進程 的ID getuid可以得到進程所有者的ID getgid可以得到組ID 進程的創建調用fork函數就可以創建一個進程的系統調用 pid tfork 四 文件操作 文件的創建和讀寫intopen constchar pathname intflags intopen constchar pathname intflags mode tmode open函數有兩個形式 其中pathname是我們要打開的文件名 包含路徑名稱 缺省是認為在當前路徑下面 flags可以是下面的一個值或者是幾個值的組合 O RDONLY O WRONLY O RDWR O CREAT O APPEND 追加 O TRUNC 如果文件已經存在 則刪除文件的內容 O NOBLOCK 非阻塞方式 前面三個標志只能使用任意的一個 如果使用了O CREATE標志 那么我們可以使用open的第二種形式 還要指定mode標志 用來表示文件的訪問權限 mode可以是以下情況的組合 S IRUSR用戶可以讀S IWUSR用戶可以寫S IXUSR用戶可以執行S IRWXU用戶可以讀寫執行 S IRGRP組可以讀S IWGRP組可以寫S IXGRP組可以執行S IRWXG組可以讀寫執行 S IROTH其他人可以讀S IWOTH其他人可以寫S IXOTH其他人可以執行S IRWXO其他人可以讀寫執行 S ISUID設置用戶執行IDS ISGID設置組的執行ID 例 fd open mnt mtd tb data O RDWR O CREAT O TRUNC fd open temp O CREAT S IRUSR S IWUSR S IXUSR S IRGRP S IWGRP S IXGRP S IROTH S IXOTH 文件打開以后 我們就可以調用write和read函數對文件進行讀寫操作了 ssize tread intfd void buffer size tcount ssize twrite intfd constvoid buffer size tcount fd是我們要進行讀寫操作的文件描述符 buffer是我們要寫入文件內容或讀出文件內容的內存地址 count是我們要讀寫的字節數 read從指定的文件fd中讀取count字節到buffer緩沖區中 同時返回count 當讀到了文件的結尾或者被一個信號所中斷 返回值會小于count 如果是由信號中斷引起返回 而且沒有返回數據 read會返回 1 且設置errno為EINTR 當程序讀到了文件結尾的時候 read會返回0 write從buffer中寫count字節到文件fd中 成功時返回實際所寫的字節數 關閉文件時 只要調用close函數就可以了 while bytes read read from fd buffer BUFFER SIZE if bytes read 1 文件的屬性intaccess constchar pathname intmode 判斷文件是否可以進行某種操作 讀 寫等等 mode可以是以下值的組合 R OK文件可以讀 W OK文件可以寫 X OK文件可以執行 F OK文件存在測試成功時 函數返回0 當有一項不符合時 返回 1 要獲得文件的其他屬性 我們可以使用函數stat或者fstat intstat constchar pathname structstat buf intfstat intfiledes structstat buf 返回的文件特性保存在類型為stat的結構體中 包含設備 節點 模式 用戶ID 組ID 文件字節數 最后一次訪問 修改的時間等信息 參數buf指向該結構 在該結構中 我們感興趣的成員之一是st mode 它包含了文件類型和文件權限 目錄文件的操作C庫函數中提供了getcwd函數 可以得到當前工作路徑 char getcwd char buffer size tsize Linux下的目錄操作函數 intmkdir constchar path mode tmode 創建目錄DIR opendir constchar path 打開目錄structdirent readdir DIR dir 讀取目錄intclosedir DIR dir 關閉目錄 其他函數intunlink constchar pathname 刪除文件intrmdir constchar pathname 刪除目錄intremove constchar pathname 刪除文件或目錄intrename constchar oldname constchar newname 文件或目錄更名intchmod constchar filename mode tmode intfchmod intfiledes mode tmode chmod和fchmod用于改變文件的訪問權限 成功則返回0 否則返回 1 五 時間概念 時間表示和測量time ttime time t tloc 返回自1970年1月1日0點以來的秒數char ctime consttime t clock 將秒數轉化成字符串 例 SatDec3110 00 002005localtime取得當地目前的時間和日期mktime將時間結構數據轉換成經過的秒數settimeofday設置目前的時間gettimeofday取得目前的時間 可以用作時間的測量 六 消息管理 POSIX無名信號量用主要是用來保護共享資源 使得資源在一個時刻只為一個進程所擁有 信號燈 semaphore 是進程間共享的資源計數器 intsem init sem t sem intpshared unsignedintvalue intsem destroy sem t sem 刪除信號燈intsem wait sem t sem 阻塞進程 直到信號燈值大于0 返回時自動將信號燈的值減1intsem post sem t sem 與sem wait相反 將信號燈的值加1 同時發出信號喚醒等待的進程intsem trywait sem t sem 與sem wait相似 但不阻塞intsem getvalue sem t sem 得到信號燈的值 SystemV信號量SystemV的信號量是信號量集 可以包括多個信號燈 每個操作可以同時操作多個信號燈 POSIX是單個信號燈 POSIX有名信號燈支持進程間通信 無名信號燈放在共享內存中時可以用于進程間通信 七 線程操作 線程線程是比進程更小的能獨立運行的基本單位 共享程序代碼節省資源線程的創建和使用intpthread create pthread t thread pthread attr t attr void start routine void void arg pthread create創建一個線程 thread是用來表明創建線程的ID attr指出線程創建時候的屬性 我們用NULL來表明使用缺省屬性 start routine函數指針是線程創建成功后開始執行的函數 arg是這個函數的唯一一個參數 表明傳遞給start routine的參數 例 if pthread create m threadID NULL ThreadQueryData void this 0 if pthread create UpdateThreadId NULL ThreadDownLoadBaseSchedule void this 0 if pthread create SpanUpdateThreadId NULL ThreadUpdateSpanTimeTableToPlc void this 0 voidpthread exit void retval intpthread join pthread thread void thread return pthread exit函數和exit函數類似 用來退出線程 這個函數結束線程 釋放函數的資源 并在最后阻塞 直到其他線程使用pthread join函數等待它 然后將 retval的值傳遞給 thread return 多線程中共同占用某一資源時 注意信號鎖機制 八 網絡編程 Linux網絡知識介紹1 客戶端程序和服務端程序網絡程序和普通的程序有一個最大的區別是網絡程序是由兩個部分組成的 客戶端和服務器端 網絡程序是先有服務器程序啟動 等待客戶端的程序運行并建立連接 一般的來說是服務端的程序在一個端口上監聽 直到有一個客戶端的程序發來了請求 2 常用的命令netstat顯示網絡的連接 路由表和接口等信息 telnet用于遠程控制的程序 可以用來調試服務端程序 3 TCP UDP介紹TCP TransferControlProtocol 傳輸控制協議是一種面向連接的協議 當我們的網絡程序使用這個協議的時候 網絡可以保證我們的客戶端和服務端的連接是可靠的 安全的 UDP UserDatagramProtocol 用戶數據報協議是一種非面向連接的協議 這種協議并不能保證我們的網絡程序的連接是可靠的 所以我們現在編寫的程序一般是采用TCP協議的 初等網絡函數介紹 TCP Socket 套接字 套接字是一個通信端口 是一種使用標準UNIX文件描述字和其他程序通信的方法 從程序員的角度來看 它很象文件描述字 因為它同文件和管道一樣使用write read來讀寫數據 但是套接字和普通文件描述字又有不同 首先 套接字除了可以有一個地址以外 還明顯包含著關于通信的3個屬性 域 類型和協議 其次 套接字的使用可以是非對稱的 它通常明確的區分通信的兩個進程為客戶進程和服務進程 并且允許不同系統或機器上的多個客戶與單個服務相連 最后 套接字的創建和各種操作與文件描述字也有所不同 socket 創建套接字 intsocket intdomain inttype intprotocol domain 說明網絡程序所在的主機采用的通信協議族 AF UNIX UNIX域 和AF INET Internet域 等 type 網絡程序所采用的通訊協議 SOCK STREAM SOCK DGRAM等 SOCK STREAM表示我們使用的是TCP協議 SOCK DGRAM表示我們使用的是UDP協議 protocol TCP UDP 由于已指定協議 這里設置為0 socket調用成功時 返回值為0 否則返回 1 例 skConnectSocket socket AF INET SOCK DGRAM 0 bind 命名套接字 intbind intsockfd structsockaddr my addr intaddrlen sockfd 是由socket調用返回的文件描述符 my addr 是一個指向結構類型sockaddr對象的指針 該對象包含了要指定給socket的地址 addlen socketaddr結構對象的長度 函數調用成功時返回0 否則返回 1 listen 創建連接隊列 intlisten intsockfd intbacklog sockfd 是bind返回的文件描述符 backlog 設置請求排隊的最大長度 listen函數將bind的文件描述符變為監聽套接字 返回的情況和bind一樣 accept 創建新的面向特定客戶的套接字 intaccept intsockfd structsockaddr addr int addrlen sockfd 是listen后的文件描述符 addr addrlen是用來給客戶端的程序填寫的 服務器端只要傳遞指針就可以了 bind listen和accept服務器端用的函數 accept調用時 服務器端的程序會一直阻塞到有一個客戶程序發出了連接 accept成功時返回最后的服務器端的文件描述符 這個時候服務器端可以向該描述符寫信息了 失敗時返回 1 connect 與服務器建立連接 intconnect intsockfd structsockaddr serv addr intaddrlen sockfd socket返回的 同服務端通訊的文件描述符 serv addr 儲存了服務器端的連接信息 其中包含了服務端的地址 addrlen serv addr結構對象的長度 connect函數是客戶端用來同服務端連接的 成功時返回0 失敗時返回 1 套接字連接示意圖服務端客戶端 socket bind accept listen 阻塞直到收到來自客戶的數據報 socket connect 建立連接 write read 數據 請求 read 進程請求 write 數據 回答 read close close 文件結束 讀寫函數寫函數writessize twrite intfd constvoid buf size tnbytes write函數將buf中的nbytes字節內容寫入文件描述符fd 成功時返回寫的字節數 失敗時返回 1 并設置errno變量 如果錯誤為EINTR 表示在寫的時候出現了中斷錯誤 如果為EPIPE 表示網絡連接出現了問題 對方已經關閉了連接 讀函數readssize tread intfd void buf size tnbyte read函數是負責從fd中讀取內容 當讀成功時 read返回實際所讀的字節數 如果返回的值是0表示已經讀到文件的結束了 小于0表示出現了錯誤 如果錯誤為EINTR說明讀是由中斷引起的 如果是ECONNREST表示網絡連接出了問題 數據的傳遞 客戶端向服務端寫 structmy structmy struct client write fd void 用戶數據報發送 UDP 兩個常用的函數intrecvfrom intsockfd void buf intlen unsignedintflags structsockaddr from int fromlen intsendto intsockfd constvoid msg intlen unsignedintflags structsockaddr to inttolen sockfd buf len的意義和read write一樣 分別表示套接字描述符 發送或接收的緩沖區及大小 recvfrom負責從sockfd接收數據 如果from不是NULL 那么from里面存儲了信息來源的情況 如果對信息的來源不感興趣 可以將from和fromlen設置為NULL sendto負責向to發送信息 此時在to里面存儲了收信息方的詳細資料 例 intiRetVal sendto skConnectSocket pszData len 0 structsockaddr 九 Linux下C開發工具介紹 GNUC編譯器 GCC GNUC編譯器 GCC 是一個全功能的ANSIC兼容編譯器 使用GCCgcc options filenames 不用任何選項編譯一個程序時 GCC將會生成 假定編譯成功 一個名為a out的可執行文件 o編譯選項來為將產生的可執行文件指定一個文件名來代替a out O O2優化選項 g輸出調試信息 用GDB調試GCC程序Linux包含了一個叫gdb的GNU調試程序 gdb是一個用來調試C和C 程序的強力調試器 它使你能在程序運行時觀察程序的內部結構和內存的使用情況 gdb可以提供的以下功能 監視程序中變量的值能設置斷點以使程序在指定的代碼行上停止執行能一行行的執行你的代碼在命令行上鍵入gdb并按回車鍵就可以運行gdb了 或者鍵入gdb直接指定想要調試的程序 gdb基本命令file裝入想要調試的可執行文件kill終止正在調試的程序list列出產生執行文件的源代碼的一部分next執行一行源代碼但不進入函數內部step執行一行源代碼而且進入函數內部run執行當前被調試的程序quit終止gdbwatch使你能監視一個變量的值而不管它何時被改變print顯示表達式的值break在代碼里設置斷點 這將使程序執行到這里時被掛起make使你能不退出gdb就可以重新產生可執行文件shell使你能不離開gdb就執行UNIXshell命令 謝謝 祝新年快樂
總結
以上是生活随笔為你收集整理的linux c语言 ppt,linux操作系统下c语言编程入门.ppt的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux 挂起 移动电脑,linux
- 下一篇: 博本 微型 电脑 linux,博本电脑下