天天看點

Linux學習筆記一 ---- Linux基礎知識認知以及初識Linux下C程式設計入門

                                                                                         本文原創 ,轉載必須注明出處 :http://blog.csdn.net/qinjuning

          從今天開始,下定決心一步一步開始步入Linux殿堂,重新拾起Linux學習時,依然記得大學時代對Linux的囫囵學習,

   勁頭持續不了幾天,就消亡在她那迷惑的外衣下。如今處于對Android系統的究極學習,以及其他很多目的,下定決心把Linux

   知識掌握好。

      本學習筆記素材來源 :

           1、《鳥哥的Linux私房菜_基礎學習篇》(電子檔)

           2、 兩篇博文對Linux下C程式設計gcc指令的認知

                    Linux下C語言程式設計--基礎知識     以及    Linux下的C程式設計實戰

    一 、Linux 作業系統來源 

             大家懂得,省略…..

    二、Linux基本知識

               說明: 相關截圖來自鳥哥那本書,目前我還沒好好消化吸收 。還得繼續加把勁。

        1、 Linnux 指令行介紹

    例如,我們常見的列出目前目錄的檔案/檔案夾的基本指令為:    ls  –al  main

           說明: ls      為一個command

                      –al    為options  a 表示列出隐藏檔案 ;  l 表示 列出檔案/檔案下的詳細資訊

                     main  為 parameter1   表示僅僅列出以“main“ 開頭的檔案/檔案夾

    其他常用的指令包括:

         ls    列出目前目錄的所有檔案/檔案夾資訊

         data  列出目前時間日期

         cd   切換路徑

      當然了,這麼多command---指令超多并且每個用法超多,我們當然不可能如此記得,是以最強大的一個指令就是 man

  指令了。 該指令的用法如下:

                       man command  

        即可 , 知曉該command的所有用法了 。

      2、Linux檔案屬性說明:

              進入Linux後,在任何一目錄 鍵入如下指令 ls -al  (該指令的意思是:詳細列出所有檔案和檔案夾的資訊) , 可以看到

     如下資訊,加上了說明資訊:    

    相關屬性說明:

           第一清單達的資訊是最重要的了, 圖解如下:

          屬性詳細說明為:

            其他的屬性相對而言就比較好了解了。

        3、Linux下一些重要目錄說明

                一些比較重要的目錄有:

三 、 Linux下C程式設計入門

          熟悉了Windows下程式設計的同學,初次接觸Linux下C程式設計可能很不習慣,因為Linux并沒有為我們提供內建開發環境IDE,

   例如Windows下的 VC,Visual Studio 等 。但是在Linux下C程式設計,能給你帶來不一樣的感受,它可以讓你熟悉編譯器如何生成

   可執行檔案的各個步驟等。

       一般來說,生成一個可執行檔案需要以下兩步:

          1、編譯:即編譯源檔案 ,生成目标檔案

          2 、連結:即将相關的目标檔案連結起來,生成一個最終可以執行的可執行檔案。(在Windows中,命名一般以.exe結束 ;

            Linux下,則以檔案屬性-x來标記)

         最後,執行該可執行檔案即可看到程式輸出了。

        再次強調的一點是,關于程式編譯的一些規範和方法,一般來說,無論是C、C++、還是pas,首先要把源檔案編譯成中間

  代碼檔案,在Windows下也就是 .obj 檔案,UNIX下是 .o 檔案,即 Object File,這個動作叫做編譯(compile)。然後再把

  大量的Object File合成執行檔案,這個動作叫作連結(link)。

        總結一下,源檔案首先會生成中間目标檔案,再由中間目标檔案生成執行檔案。在編譯時,編譯器隻檢測程式文法,和函  

    數、變量是否被聲明。如果函數未被聲明,編譯器會給出一個警告,但可以生成Object File。而在連結程式時,連結器會在所有

    的Object File中找尋函數的實作,如果找不到,那到就會報連結錯誤碼(Linker Error),在VC下,這種錯誤一般是:Link 2001

    錯誤,意思說是說,連結器未能找到函數的實作。你需要指定函數的Object File.

  Linux下C編譯器利劍GCC 指令初步認知

     GCC編譯器是Linux平台下最重要的開發工具,它是GNU的C和C++編譯器,其基本用法為:

            gcc [options] [filenames]

        說明:為了下述表達友善,假定存在如下一個簡單的C源檔案, helloword.c   

[cpp] view plaincopyprint?

  1. /** 
  2.   name      hellword.c   
  3.   @author  qinjuning 
  4. */  
  5. int main()  
  6. {  
  7.     printf("Hello World"n");  
  8.     return 0 ;  
  9. }  

     最簡單的編譯方法是 gcc  hellowrold.c 它會為目标程式生成預設的檔案名a.out,直接執行該可執行檔案,即可看到輸出 。

     例如 在shell中輸入以下指令:

            First Step :  gcc  helloworld.c   ↙ (即輸入Enter鍵)        Result :即可生成a.out 可執行檔案

            Second     :   ./a.out                                                     Result  : 執行該檔案,即可看到程式輸出 。

      options為編譯選項,GCC總共提供的編譯選項超過100個,但隻有少數幾個會被頻繁使用,我們僅對幾個常用選項進行介紹。

    -o  含義:生成目标檔案并且為指定生成的目标檔案命名 ,

               例如:  gcc –o  helloworld   helloworld.c     那麼生成的可執行檔案為 hello ,而不是a.out

    -c  含義: -c選項告訴GCC僅把源代碼編譯為目标代碼而跳過彙編和連接配接的步驟,預設生成檔案名為 [file_name].o 。

           PS:  由于頭檔案以及引用關系, 我們同樣要利用gcc –o  指令為了對相關目标檔案進行編譯,以便生成一個可執行檔案。

假設存在如下源代碼,包含了主檔案和頭檔案等

    主檔案:  main.c

[cpp] view plaincopyprint?

  1. <span style="font-family:Microsoft YaHei;font-size:16px;"></span><pre class="cpp" name="code">/* main.c */  
  2. #include <stdio.h>  
  3. #include "first_1.h"  
  4. #include "first_2.h"  
  5. int main()  
  6. {  
  7.     printf_str("This is my first linux c")  ;  
  8.     print_to_num(10) ;  
  9.     return 0 ;  
  10. }  

   兩個頭檔案 

[cpp] view plaincopyprint?

  1. <span style="font-size:16px;">/*printf_1.h */  
  2. #ifnde  _FIRST_H_  
  3. #define _FIRST_H_  
  4.    void printf_str(char *str);  
  5. #endif  
  6. /*printf_2.h */  
  7. #ifnde  _SECOND_H_  
  8. #define _FIRST_H_  
  9.    void print_to_num(int num);  
  10. #endif  
  11. </span>  

  真正函數實作的源檔案

[cpp] view plaincopyprint?

  1. <span style="font-size:16px;">/*printf_1.c */  
  2. #include <stdio.h>  
  3. #include "first_1.h"  
  4. void printf_str(char *str)  
  5. {  
  6.     printf("%s  . I am com" , str);  
  7. }  
  8. /*printf_2.c */  
  9. #include <stdio.h>  
  10. #include "first_2.h"  
  11. void print_to_num(int value)  
  12. {  
  13.     int i = 0 ;  
  14.     for( ;i < value ;i++)  
  15.        printf("cur value is %d ##\n" , i);  
  16. }  </span>  

    編譯步驟如下:

          1 、 編譯:對不同的源檔案生成目标檔案(xxx.0)

                  gcc  -c   main.c               ↙         生成 main.o  目标檔案

                  gcc  -c   printf_1.c           ↙         生成 printf_1.o 目标檔案

                  gcc  -c   printf_2.c           ↙         生成 printf_2.o 目标檔案

         2、 連結:将相關的目标檔案連結起來,并形成可執行檔案

                 gcc  -c  main   main.o  printf_1.0   printf_2.o             ↙   即可生成可執行檔案main

         3、 輸入 ./main  即可執行該檔案并可看到我們程式結果

   關于GCC的更多指令和調試方法,請參考如下兩篇部落格:

                1、Linux下C語言程式設計--基礎知識

                 2、Linux下的C程式設計實戰