2019年7月4日星期四

1、linux基本命令linux

ls/cd/pwd  ->沒有修改系統資源,只是瀏覽linux系統,因此在任何的路徑下均可以使用,沒有受到權限限制。ubuntu

一、 建立普通文件?   -> touchwindows

用法: touch + [新文件的路徑] + ...   -> 既能夠是絕對,又能夠是相對。數組

例子1: 假設當前在家目錄,想在家目錄下建立一個新的文件,名字叫test.c。框架

相對: touch ./test.c  等價於  touch test.c函數

絕對: touch /home/gec/test.c工具

例子2: 假設當前在/home目錄,想在根目錄下建立一個新的文件,名字叫example.txt。ui

相對: touch ../example.txtspa

絕對: touch /example.txt命令行

提示錯誤: touch: cannot touch `../example.txt': Permission denied  -> 權限拒絕!

1)爲何會出現這個錯誤?

Permission denied  -> 由於權限不足致使執行失敗!

當前$,表明一個普通用戶,在家目錄擁有一切的權限,能夠在家目錄下操做任何的東西都不會受到權限問題。

若是不在家目錄下,則若是修改了系統(增長/刪除),都會受到權限的拒絕!

2)若是真的須要在家目錄之外的路徑下建立/刪除文件?

方式一:臨時切換到超級用戶來執行這個命令。  sudo + 命令

gec@ubuntu:/home$ sudo touch ../example.txt

[sudo] password for gec:    -> 在linux輸入密碼,不會回顯給用戶。

   結果: 當前仍是一個普通用戶。

方式二:切換到超級用戶,再執行命令。

gec@ubuntu:/home$ sudo su  -> 切換到超級用戶

root@ubuntu:/home#

超級管理員名字: root

當前身份: #

root@ubuntu:/home# touch ../test.txt  -> 直接執行命令,就不會受到權限干擾。

root@ubuntu:/home# exit   -> 切換到普通用戶

exit

gec@ubuntu:/home$

二、 刪除普通文件?  -> rm命令

用法: rm + [須要刪除的文件的路徑]

       假設當前在家目錄

   練習1: 刪除家目錄下test.c

          rm ./test.c

   練習2: 刪除根目錄下example.txt和test.txt

         sudo rm ../../example.txt ../../test.txt   -> 能夠跟多個文件的路徑。

2、編輯C語言程序的工具。

一、 在linux系統下編輯?   ----  使用vi編輯工具。

首先使用vi指定文件的名字,經過模式切換對文件進行編輯。

1)在家目錄下指定一個新的文件名字叫test.c。

gec@ubuntu:~$ vi test.c

2)進入vi工具後,首先是"通常模式"。

   通常模式的特色:不可以對文本進行編輯,只能經過方向鍵查看文件內容。

3)按"i"鍵,切換到"編輯"模式。

   編輯模式特色:在底行會出現一個字符串"-INSERT-",在該模式下,隨意編輯文本,可是不可以保存文本!

4)想保存退出,只能先按"Esc"切換到通常模式,再按":"切換到底行模式。

   w(write) -> 保存

   q(quit)  -> 退出

   底行模式特色: 在底行出現一個":",能夠保存退出文本!

=====================================================================================

練習:使用vi來編輯程序。

 

#include <stdio.h>

int main()

{

       printf("helloworld!\n");

       return 0;

}

======================================================================================

 

二、 在linux系統下編輯?   ---  使用gedit編輯工具。

1)使用gedit指定一個文件的名字。

2)直接編輯,按退出便可!

三、 在windows系統下編輯?  --> 使用notepad++編輯工具。

由於在windows編輯完工程以後,須要將文件放置linux下處理,因此須要設置linux與windows的共享目錄。

1)確保共享目錄路徑在windows下存在。

   D:\GZ1934

2)告訴linux,共享目錄在哪裏?

   虛擬機  -> 設置  -> 選項  -> 共享文件夾  -> 老是啓用  -> 添加  -> 下一步  -> 瀏覽  -> 主機路徑:D:\GZ1934

   --> 下一步  -> 完成  -> 肯定

3)使用命令切換到共享目錄下路徑

   cd /mnt/hgfs/

   ls   -> 看到GZ1934,說明共享成功!

   ls   -> 沒有看到任何,重啓虛擬機!

   練習1: 成功設置共享目錄

   練習2: 在02/code/test.c -> 編輯一下

   練習3: 在linux與windows刪除/建立東西,另一個系統還在不在!

 結論: linux與windows是互通,在linux下操做共享目錄下內容,不須要sudo

思考題:

1)能不能在/mnt/hgfs下建立任何東西?

答案:不能,由於這個目錄下的內容經過共享設置的,不是經過命令來建立!

2)能不能在共享目錄中建立?

答案:能,用戶隨意建立。

3、分析linux C語言大綱

一、main函數使用事項、基本數據類型、變量定義/賦值、生命週期做用域、運算符,程序編譯過程分析。

二、ASCII碼,語句/表達式,逗號表達式/三目運算,控制流循環與分支結構。

三、函數定義、調用、聲明、函數形式參數與實參之間關係,函數返回值,函數書寫規則,函數運行規則。

四、一些特殊函數調用:遞歸函數、回調函數、變參函數,內聯函數

五、數組定義/賦值,數組元素,一維數組、二維數組、整型數組、字符數組,指針數組。

六、指針定義/賦值,指針的數據類型,整型指針,字符指針,數組指針,函數指針,二級指針。

七、結構體定義,結構體變量、結構體指針、結構體變量與指針如何訪問結構體的成員,如何計算結構體的空間。

八、聯合體、枚舉類型、typedef、宏定義、頭文件、條件編譯、拆分多個.c文件

九、如何申請堆空間?如何釋放?

十、字符串函數,計算字符串長度,拷貝字符串到另外一塊內存空間,追加字符串,比較兩個字符串。

4、linux C語言基本框架。

C語言程序入口: main函數  -> main()  -> 每個程序都必須有main函數。

一、main函數有什麼特色?

1)程序必須以main做爲主函數命名。

2)程序不是從第一個函數開始執行,而是從main函數開始。

3)main函數在程序中有且僅有一個。

二、main函數基本框架?

main()   -> 函數頭

{      -> 函數體

 

}

三、linux函數屬於一個任務,每個任務都會一個返回值,返回值就會返回給調用函數的地方。

返回值類型寫在函數頭前面。

返回值類型 main()

{

       ...;

       ...;

       return 返回值結果;  

}

注意事項:

1)返回值類型能夠是基本數據類型,也能夠是自定義數據類型。

2)main執行return表明程序的退出,子函數執行了return表明子函數返回,返回到調用的地方。

3)返回值結果必須與返回值類型匹配。

例子:

int fun()

{

       ...;

       return 1; -> 返回到main函數中

}

 

int main()

{

       fun();

       return 0;  -> 表明程序結果

}

四、頭文件

1)程序中必定要添加頭文件嗎?

不是。若是程序沒有調用到任何的函數,則不須要添加頭文件,只有當程序調用了函數,才須要添加對應的頭文件。

例子:如下例子不須要添加頭文件

int main()  

{

       return 0;

}

2)頭文件有什麼做用?

對函數進行聲明,函數在調用前必須聲明,不然就會編譯警告!

3)函數對應的頭文件是什麼?

例子: printf()  -> 在Ubuntu終端輸入: man 3 printf(按'q'退出)  -> 獲得對應的頭文件: #include <stdio.h>

例子:

#include <stdio.h>

 

int main()

{

       printf("helloworld!\n");

       return 0;

}

4)頭文件不加會有什麼問題?

warning: incompatible implicit declaration of built-in function ‘xxxxx’  -> xxxxx這個函數的頭文件沒有添加!

五、 linux在運行程序時,須要給程序傳遞一些命令行參數

1)怎麼樣才能實現命令行傳參?

int main() / int main(void)  -> main函數不須要命令傳遞參數

int main(int argc,char *argv[])  -> main函數能夠進行命令行傳參

 argc -> argument count  參數個數

 argv -> argument value  參數的值

 ./a.out              -> argc = 1  argv[0] = "./a.out"

 ./a.out aaa            -> argc = 2  argv[0]  ="./a.out"  argv[1] = "aaa"

 ./a.out aaa bbb        -> argc = 3  argv[0] = "./a.out"  argv[1] = "aaa"  argv[2] = "bbb"

 ./a.out aaabbb         -> argc = 2  argv[0] = "./a.out"  argv[1] = "aaabbb"

2)printf()如何輸出命令行參數內容?

  %d  -> 以十進制形式輸出內容

  %s  -> 輸出字符串

3)命令行傳遞參數有什麼做用?

使用命令行傳遞參數,argv數組中值就能夠每個執行結果都不同,並不須要每個修改都要從新編譯。

    練習4:不管輸入多少個參數,程序均可以將全部的參數都打印出來!

       ./a.out

       ./a.out aaa

       ./a.out aaa bbb

 

#include <stdio.h>

                             //  argv[0]   argv[1]  argv[2] argv[3]

int main(int argc,char *argv[])  //  ./a.out    aaa      bbb     ccc

{

       int i;

       for(i=0;i<argc;i++)

       {

              printf("argv[%d] = %s\n",i,argv[i]);

       }

       return 0;

}

六、註釋  -> 對代碼進行解析,須要添加對應的註釋。

 

  單行註釋:  //註釋內容

  多行註釋:  /*註釋內容*/

七、縮進與空行

當有複合語句{}時,須要將複合語句中全部表達式進行縮進。

代碼中每個模塊使用空行進行分隔,複合語句{}須要獨立出來一行。

八、編譯程序

編譯器: gcc

用法: gcc + [須要編譯文件的路徑]

1)爲何須要進行編譯?

由於C語言屬於高級語法,機器只能看懂二進制程序,因此須要將C語言編譯爲二進制文件,才能在機器上運行。

2)如何編譯?

若是不指定新的二進制文件名字是什麼,那麼編譯器默認在當前目錄下生成一個a.out二進制文件。

編譯命令: gcc test.c  -> 默認在當前目錄下生成a.out二進制文件。

         gcc test.c -o test  -> 默認在當前目錄下生成test二進制文件。

3)執行二進制程序

執行命令: ./a.out

執行命令: ./test

  a.out與test除了名字不同,其餘都同樣!

5、基本數據類型與變量

一、 linux C語言中基本數據類型有哪些?

char、short、int、long、float、double。

二、 這些數據類型在內存中佔用多少個字節?

使用sizeof()進行計算。

char、short、int、long、float、double。

 1      2     4    4     4       8   -> 基本數據類型佔用空間大小由C語言編譯系統決定!

三、 如何定義變量?

公式: 數據類型 + 變量名

數據類型?  -> 從基本數據類型中選擇一個。

變量名定義規則?

1)只能由數字、字母,下劃線組成。

2)不能以數字開頭。

3)不能夠與系統的關鍵字重名。

例子: 定義一個整型變量?

       int a;   -> 在內存空間連續申請4個字節,使用變量a間接訪問這片內存空間。

四、 程序運行時,會佔用內存空間?

=========test.c=========

int main()

{

       int a;

       return 0;

}

========================

./test  -> 將你的程序加載內存中

int a;  -> 在內存空間連續申請4個字節,使用變量a間接訪問這片內存空間。

return 0;  -> 釋放空間

五、內存如何分配空間?   -> 原則: 連續空閒不肯定

1)分配空間時,內存必定是連續的。

2)分配的空間,必定是空閒的(以前沒有變量申請過的)

3)分配空間時,位置是不肯定的。

6、運算符號

+ - * / % == != | || & &&

  + - *

  /   -> 結果看兩邊符號

  5/3 = 1

  5.0/3 = 1.666667

  5/3.0 = 1.666667

  5.0/3.0 = 1.666667

  %  -> 取餘,兩邊不能出現小數點

  5.0%3

  5%3.0

  5.0%3.0

  5%3  -> 正確

  ==  判斷等於

  !=  判斷不等於

  |   -> 位或運算

  ||  -> 邏輯或運算

  &   -> 位與運算

  &&  -> 邏輯與運算

  5&6 = 0101 & 0110 = 4

  5&&6 = 1  (非0即真)

  5|6 = 0101 | 0110 = 7

  5||0 = 1  (非0即真)

相關文章
相關標籤/搜索