日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux C语言编程基本原理与实践

發布時間:2023/12/2 linux 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux C语言编程基本原理与实践 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

重識C語言

  • C語言是一種通用的, 面向過程的編程語言, 在系統與應用軟件的開發應用較廣

  • 是人類和計算機交流的一種方式

  • ANSI C: 是C語言的標準, 為了避免各開發商用的C語言語法的差異

  • C語言的特點: 簡單, 快速, 高性能, 兼容性好, 功能強大, 易于學習

  • C語言適合做什么

  • Linux嵌入式, 小工具(命令行下的cd, ls之類的命令) 小巧靈活,語法簡單,適合做小工具

  • 與硬件打交道的程序: 操作系統, ARM嵌入式, 單片機編程以及Arduino編程等等

  • 對性能要求較高的應用程序: NGINX(C)的并發量 = Apache(C ) * 10

  • C適合領域

  • 小工具(語法簡單)

  • 和硬件打交道的程序 ARM嵌入式,單片機,Arduino編程(有指針,可操作內存)

  • 有高性能要求的程序

  • nginx:c apache:c

    linux嵌入式


    開發環境與配置:

    • C語言是隨著UNIX誕生而產生的一門編程語言

    • Mac電腦是Unix內核; Windows下可以安裝Linux虛擬機

    Ubuntu:

  • Ubuntu和CentOS是較為常用的Linux發行版本, 個人電腦用Ubuntu更好

  • Ubuntu的kylin版對中文支持很好

  • amd64版: AMD當初率先推出64位CPU, 所以Ubuntu把64位CPU型號定義為amd64(Intel照用), 一直沿用到現今; 32位用x86

  • LTS版: 長時間的技術支持版本

  • 裝Ubuntu系統可以選擇雙系統, 也可在原來的Windows電腦上裝虛擬機

  • PS: 盡量在Linux環境下開發C語言程序


    常用指令

    • 終端編輯器:emacs vim

    • 安裝軟件:sudo apt install 【軟件名】

    • 更新軟件:sudo apt update

    • Ctrl Alt T:打開終端

    • cd ~?:進入當前用戶的根目錄

    • pwd?:查看當前所在路徑

    • ls?:當前章目錄包含哪些文件

    • ls -l?:顯示當前文件的類型,權限,創建時間,名字

    • ls -al或ll:顯示隱藏文件

    如果前面是d就是文件夾,-就是普通類型的文件

    • touch **?:創建字符型文件

    • rm **?:刪除

    • mkdir **?:創建目錄(文件夾)

    • vi **?:打開(進入)文件

    vi 一個不存在的文件,進入后無法輸入內容,因當前在命令模式下;按字符i,可進入INSERT插入模式,就可輸入內容,按Esc返回命令模式;

    在命令模式下:

    • :w?:保存該文件

    • :q?:退出

    • i?:當前光標前面插入字符

    • Shift i?:跳到本行行首插入字符

    • a?:當前光標后面插入字符

    • Shift a?:跳到本行末尾插入字符

    • o?:在當前下一行插入字符

    • Shift o?:在當前上一行插入字符

    • x?:刪除當前光標所處字符

    • d d?:刪除整行

    Linux下最好用的文本編輯器: emacs, vim

    • cc -v(gcc -v): 查看編譯器版本

    • apt-get是一條linux命令,適用于deb包管理式的操作系統,主要用于自動從互聯網的軟件倉庫中搜索、安裝、升級、卸載軟件或操作系統。

    • clear:清潔屏幕


    Linux下第一個C程序

    linux下一般不用void main,最新c語言標準,int main

    #include?int?main() {????printf("hello,world!\n");????return?0; }1234567cc?a.c1

    默認會為我們編譯并生成可執行文件a.out(可讀可寫可執行)

    • ./表示當前路徑下,

    • ./a.out?執行當前路徑下的a.out文件

    • r表示可讀?w表示可寫?x表示可執行

    三組重復的順序為”創建者”,”用戶組”,”任意其他用戶”


    多個源文件分而治之

    c語言是一個結構化的程序語言,是支持多函數的。程序可由若干個函數組成。

    vim?hello.c1

    最原始版本的實現(hello.c):

    #include?int?max(int?a,?int?b) {????if(a>b){????????return?a;??????}else{????????return?b;} }int?main() {????int?a1?=?33;????int?a2?=?21;????int?maxNum?=?max(a1,a2);????printf("the?max?value?is?%d\n",maxNum);????return?0; }12345678910111213141516171819
    • 我們的stdio.h是在我們的user/include中被內置了

    • 在編寫max函數時對齊,編寫內部時括號進行縮進對齊。

    附加知識: vim分屏顯示

    • :sp 文件名?//創建(打開)新文件

    • 上屏:?ctrl w 上箭頭

    • 下屏:?ctrl w 下箭頭

    • 打開行號?:set nu

    • 剪切:(最后一行行數) dd

    • 粘貼:p

    //這兩個不用點冒號

    • 關閉行號:set nonu

    如果就是上圖代碼直接編譯會報錯,這是一個未聲明的函數。

    有兩種分離方案:

    • 第一種是int max(int a,int b);,在hello.c中聲明該方法,然后編譯的時候需要加上max.c

    • 一種是#include "max.c"?然后編譯的時候就不需要加上max.c一起編譯

    版本1:

    0-hello.c:

    #include?int?max(int?a,int?b);int?main() {????int?a1?=?33;????int?a2?=?21;????int?maxNum?=?max(a1,a2);????printf("the?max?value?is?%d\n",maxNum);????return?0; }1234567891011

    0-max.c:

    int?max?(int?a,?int?b) {????if(a>b){????????return?a;}else{????????return?b;} }12345678

    編譯命令:

    gcc?0-hello.c?0-max.c?-o?0-hello.out1

    如果不加上0-max.c一起編譯,會出現錯誤

    gcc?0-hello.c?-o?0-hello.out/tmp/cc8GuaAH.o:在函數‘main’中:0-hello.c:(.text 0x21):對‘max’未定義的引用collect2:?error:?ld?returned?1?exit?status1234

    版本2

    1-hello.c:

    #include?#include?"0-max.c"int?main() {????int?a1?=?33;????int?a2?=?21;????int?maxNum?=?max(a1,a2);????printf("the?max?value?is?%d\n",maxNum);????return?0; }1234567891011

    0-max.c與原來的一致

    編譯命令:

    gcc?1-hello.c?-o?1-hello.out1

    如果此時多加了0-max.c一起編譯

    gcc?1-hello.c?0-max.c?-o?1-hello.out /tmp/ccjcCmVa.o:在函數‘max’中:0-max.c:(.text 0x0):?`max'被多次定義 /tmp/cclIxMtD.o:1-hello.c:(.text 0x0):第一次在此定義 collect2:?error:?ld?returned?1?exit?status12345

    終端下:

    • gcc 文件名.c -o 命名.out

    • 生成.out并命名

    • #include <>表示在預裝的庫里查找

    • #include "max.c"表示在當前目錄內查找文件

    include "max.c"相當于把整個函數復制進來了。效果等同于寫進來

    • wqa?是將多個文件一起保存


    頭文件與函數定義分離

    把函數的聲明和定義分離開來

    代碼沒有main函數不能執行,main是入口。

    • .h 頭文件

    • .o 編譯之后的中間文件

    • .c 源代碼

    mtianyan@ubuntu:~/Desktop/zjuPlan/CSF878/CCode/linux_c/2-lesson/part1$?ls0-max.c??1-hello.c12

    加快編譯速度

    gcc?-c?0-max.c?-o?0-max.o1

    將max.c變成max.o之后,我們需要把hello.c中的include注釋掉并添上方法聲明

    #include?//#include?"0-max.c"int?max(int?a,int?b);123

    可讀可寫不可執行,max.o相當于計算器對于源代碼進行了翻譯,變成計算機可識別的機器碼

    gcc?0-max.o?1-hello.c?-o?1-hello.out1

    新建一個min.c

    int?min?(int?a,?int?b) {????if(a<b){????????return?a;}else{????????return?b;} }12345678

    hello.c中進行minNum的調用

    #include?//#include?"0-max.c"int?max(int?a,int?b);int?min(int?a,int?b);int?main() {????int?a1?=?33;????int?a2?=?21;????int?maxNum?=?max(a1,a2);?int?minNum?=?min(a1,a2);????printf("the?max?value?is?%d\n",maxNum);?printf("the?min?value?is?%d\n",minNum);????return?0; }123456789101112131415

    編譯命令:

    gcc?-c?min.c?-o?min.o1gcc?0-max.o?min.o?1-hello.c?-o?2-hello.out1

    加快編譯速度。不會再修改的函數,公共框架和公共類編譯生成靜態庫。

    gcc的編譯流程分為4步:

    總結

    以上是生活随笔為你收集整理的Linux C语言编程基本原理与实践的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。