-
學習查看全部
-
哈哈 ,逗查看全部
-
http://img1.sycdn.imooc.com//54faa2cd0001d6ee12000530-120-68.jpg查看全部
-
http://img1.sycdn.imooc.com//54faa2b80001510c12000530-120-68.jpg查看全部
-
sp max.c ctrl+w+向下箭頭 set nu 9+d+d ctrl+w+向上箭頭 p wqa查看全部
-
test查看全部
-
快點出新課程,老師~查看全部
-
【編寫使用管道的程序】 我們在文件夾下,c語言做的每個程序都有一個獨立的功能,我們可以將多個小程序使用管道連接到一起。 我們現在寫一個程序avg.c,求任意個數的平均值: #include <stdio.h> int main() { int s, n; scanf("%d,%d", &s, &n); float v = s / n; printf("v = %f\n", v); return 0; } 退出vim進行編譯cc avg.c -o avg.out,我們得到avg.out,我們輸入3000,3。 我們再寫一個統計輸入的程序input.c: #include <stdio.h> int main() { int flag = 1; int i; int count = 0; int s = 0; while(flag){ scanf("%d", &i); if(0==i) break; count++; s+=i; } printf("%d,%d\n",s,count); return 0; } 我們對這個函數進行編譯cc input.c -o input.out,我們輸入3000 2000 0,輸出總工資5000和人數2。 我們不妨使用以上兩個程序結合起來,將所有數據進行統計input.out,之后通過管道經過avg.out計算平均值,命令可以寫為./input.out | ./avg.out,然后進行輸入,輸入完成我們便得到了對應的平均工資。 以上就是通過管道,將兩個小程序連接起來得到更復雜的程序的過程。查看全部
-
【管道原理及應用】 Linux系統自帶的小工具如何使用,其實這些小工具就是一個應用程序,比方說ls /查看根目錄,比方我們要查找某個目錄下有多少個文件名包含“ab”,我們可以寫ls /etc/ | grep ab,其中這個豎線就是管道的意思,grep是從文本文檔中查找指定的行(其實可用于文本搜索)。 將我們前一個程序執行輸出流,通過管道得到我們需要的內容。通過管道我們就可以使用很多自動化的方法,管道的應用還有很多。 例如,ps可以查看當前的進程,我們想查看我們當前操作系統是否開啟ssh進程,我們可以使用命令ps -e | grep ssh,查看所有進程中是否包含ssh服務的,若有我們便可以進行連接。查看全部
-
【錯誤流】 我們將程序進行一些修改,如下: #include <stdio.h> int main() { printf("input the int value i:\n"); int i, j; scanf("%d", &i); printf("input the int value j:\n"); scanf("%d", &j); if(0!=j){ printf("%d/%d=%d\n",i,j,i/j); }else{ fprintf(stderr, "j != 0\n"); return 1; } return 0; } 對程序進行編譯cc main.c,得到./a.out,分別根據提示輸入8和4得到結果“8/4=2”,我們使用命令echo $?,得到0說明程序正常輸入,下面我們來測試一下錯誤流,再次執行程序./a.out,我們輸入8和0,并使用echo $?命令得到返回值為1,則有錯誤流顯示的結果“j != 0”。 我們能否將正確和錯誤的結果分別倒入(寫文件的方式)到不同的文件中去呢?命令我們寫./a.out 1>t.txt 2>f.txt,正確的導入到t.txt中,錯誤的導入到f.txt。同樣地,我們還可以把輸入流加到剛才的命令中去。 根據以上講的,有: 標準輸入流 ==> 鍵盤輸入 標準輸出流 ==> 終端輸出 標準錯誤流 ==> 錯誤輸出 我們再結合通道,就可以寫出有實際意義的命令來。查看全部
-
【輸入輸出流以及錯誤流的重定向機制】 Linux幾乎可以用于任何領域,這里我們不得不提出linux的通道,管道起到了很重要的作用,不同應用程序之間要配合使用,就需要用到管道。 我們這里先給出一個例子main.c,主要介紹輸入流,輸出流和錯誤流的重定向機制,對于管道的理解會比較容易些。 #include <stdio.h> int main() { printf("input the int value i:\n"); \\printf其實對fprintf的封裝,是從標準輸出流(即stdout)來輸出這個過程 scanf("%d", &i); //默認輸入流是鍵盤 printf("input the int value j:\n"); scanf("%d", &j); printf("i+j=%d\n", i+j); } 執行命令編譯cc main.c,得到a.out,運行a.out,我們分別輸入3和5輸入到終端。我們標準輸出流是1,輸出入是0。我們可以使用命令./a.out 1>> a.txt,其中>>符號(不寫參數就是輸出流),之前默認輸出流是終端,現在我們則改為輸出到a.txt中,我們執行命令后,分別輸入3回車后再輸入5。再使用命令cat a.txt,我們可以看到我們已經輸出到文件里的內容。 我們再次執行./a.out >> a.txt,我們再次輸入參數,完成后我們再次使用cat來查看a.txt文件里的內容,發現之前的內容還在,新的輸出內容追加到了后面。 再舉一個重定向的例子,我們使用命令ls /etc >> etc.txt,我們將ls目錄下的內容輸入到了etc.txt文件中;但我們如若改重定向符號想覆蓋掉之前的內容,可以把雙箭頭>>改為單箭頭>,則文件中先前的內容就會被覆蓋掉。 【輸入流重定向】 我們可以創建一個文件vi input,txt,內容如下: 6 8 我們再次執行./a,out < input.txt,不存在追加模式,所以我們用單箭頭<,我們可以將要輸入的內容全部在input.txt中準備好,命令執行后,我們便在終端上可以看到結果。查看全部
-
【標準輸入流,輸出流,錯誤流】 現在有cio.c文件: #include <stdio.h> //標準輸入輸出 /* stdin stdout stderr */ int main() { printf("hello world!\n"); //輸出功能由標準輸出流完成,printf是系統封裝后的 int a; scanf("%d", &a); //標準輸入流,錯誤流是系統出錯的時候的 printf("input value is : %d\n", a); return 0; } 在我們輸入a.out時,當程序執行的一瞬間,系統給程序提供了一個進程,當程序啟動時,系統也提供給程序一系列的指針。linux將所有的外設(攝像頭,打印機云云)也罷等等,都視為文件。當啟動應用程序時候,也當文件操作,會產生三個文件(stdin,stdout,stderr,即標準輸入,輸出,錯誤流)。 默認情況下,輸入流就是鍵盤,stdout也可以切換默認為顯示器,我們可以切換為網卡或者打印機,錯誤流同理。我們在啟動文件的時候,都會產生這三個文件。 printf函數是一個封裝過的函數: printf("Please input the value a:\n"); fprintf(stdout, "please input the value a:\n"); 因為stdout默認是顯示器,上兩句就是等價的,printf其實就是fprintf封裝后得到的。 同樣,我們也有scanf和fscanf的關系(下面兩句是等價的): scanf("%d", &a); fscanf(stdin, "%d", &a); 同樣,我們也有錯誤流: if(a<0){ fprintf(stderr, "the value must > 0\n"); return 1; } return 0; 如何讓程序知道出錯了,我們通過返回值1和0體現,再次編譯cc cio.c -o a2.out,我們運行a2.out,輸入2則正常執行,當輸入-1,則有我們對應的提示,即錯誤流就發揮作用了。 其實Linux一個很大的系統,就是由這些類似的小工具完成的,當等于0是為正確,錯的話為其他值。當然,標準的輸入流,輸出流,以及錯誤流也可以重定向。查看全部
-
sudo apt-gat查看全部
-
建立一個main.c文件 #include <stdio.h> int main(int argv, char* argc[]) { printf("hello world!\n"); return 0; } 我們使用命令 gcc main.c -o main.out && ./main.out linux通過&&符號將兩個指令作為一個指令輸出了,但是linux是如何確定第一條指令是否正確輸出了呢? 我們再次使用./main.out,然后可以使用命令echo $?,若返回0則說明程序正常,但是若為別的數字則說明程序執行失敗了,返回的是一個錯誤碼(好比windows下藍屏了,就會返回一個錯誤碼)。 返回正確則會返回0,是因為我們的程序里面最后寫的是return 0,但當我們將這個return 0改為reutrn 101后,我們再使用指令echo $?,發現返回的是101。 【關于return 0和命令連接符&&】 我們分別對main.c程序進行修改(return后一個為0,一個為101),分別生成main.o和main2.o文件。 return 0:gcc main.c -o main.o return 101:gcc main.c -o main2.o 之后我們使用命令./main.o && ls和./main2.o && ls,發現前者即返回hello world!同時顯示了當前的目錄(其中ls為顯示當前目錄命令),但是后者卻只返回hello world!,即&&符號后面的語句沒有執行。我們兩個命令執行后,分別執行echo $?命令,前者返回0,后者返回101。 我們知道&&是and操作,需要前一句執行正確才能執行and(即&&)后面的內容。對于上面的那個例子,我們不禁可以推斷出,0在linux下即為(程序執行)正確的意思,因此才會執行&&后面的ls命令。查看全部
-
假設有很多.c以及.o文件的時候,我們就需要gcc后面跟一串.c文件等等,那么我們是否有很方便的命令來提高效率呢? make工具就可以很清晰和快速的將文件進行整理,make內部使用了gcc。 首先我們檢查一個我們是否安裝了make工具(使用命令 make -v,若安裝則顯示安裝信息,版本號碼,若未安裝,我們使用命令sudo apt-get install make)。 我們約定一個文件makefile來進行我們之前寫過的文件進行配置。 makefile文件中可以寫注釋,以井號開頭。 hello.out是我們的目標文件,但其中需要max.o,min.o,hello.c這三個文件,我們在makefile寫下: # this is make file。注意 hello.out:max.o min.o hello.c gcc max.o min.o hello.c # 同時我們寫出max.o的文件來源 max.o:max.c gcc -c max.c min.o:min.c gcc -c min.c 刪除以o為后綴的文件:rm *.o 最上面的文件是我們最終需要的文件hello.out,同時它是由max.o,min.o,hello.c,同時我們再給出這三個文件鎖依賴的文件(其實就是遞歸),找到各自的生成的源頭文件。若最后我們沒有在gcc中指定輸出名稱,則最后使用make命令(也就是直接命令make回車),就生成a.out文件,若要指定生成的文件名,我們就可以使用修改Makefile文件內的代碼(改為gcc max.o min.o hello.c -o hello.out)。 此外,還需要注意的是,在Makefile文件中,我們gcc命令前需要有6個空格(即一個TAB鍵),若不是6個空格,則在使用make命令時,則會報錯導致無法生成out文件等。查看全部
舉報
0/150
提交
取消