系統調用read的作用是:從與檔案描述符filedes相關聯的檔案裡讀入nbytes個位元組的資料,并把它們放到資料區buf中。它傳回實際讀入的位元組數。這可能會小于請求的位元組數。如果read調用傳回0,就表述未讀入任何資料,已經達到了檔案尾。同樣,如果傳回的是-1,就表示read調用出現了錯誤。
為了更友善地一眼看出程式輸出的資訊,很多時候我們都想要用顔色讓輸出的結果更為直覺,無奈Linux下的顔色永遠都是黑底綠字。其實改變顔色的方式很簡單。如下代碼所示


輸出的效果:
需要include的頭檔案


對于多線程makefile中,要注意添加-lpthread,以便添加pthread的連結庫。另外,需要加入宏定義-D_REENTRANT,以便将有的不可充入的函數或者變量,變成可重入的,以便适應多線程的要求(詳見圖1)。
下面是一個多線程的makefile。其中在ihome_arm.c這個檔案中,我們用到了多線程。在ihome_arm.c中我們需要引用comtest.c中的函數。

-linux-gcc -o ihome_arm comtest.o ihome_arm.o -L/usr/include/nptl -
-linux-gcc -
-linux-gcc -D_REENTRANT -I/usr/include/nptl -
rm ihome_arm comtest.o ihome_arm.o

-L/usr/include/nptl 的說明見圖2.
圖2 為什麼添加-L/usr/include/nptl
以上圖檔來自《Linux程式設計 第四版》
在知識點四中,我們程式裡面有comtest.c、comtest.h、ihome_arm.c。其中在ihome_arm.c這個檔案中,我們用到了多線程。在ihome_arm.c中我們需要引用comtest.c中的函數。我曾很傻氣地直接在ihome_arm.c中直接引用comtest.c,結果導緻大量的重複定義出現。正确的方式應該是,為ihome_arm.c引用的類型、變量、函數寫一個comtest.h的頭檔案,這樣就不會引起大量的重複定義。頭檔案編寫的注意事項見上一篇文章。
函數名: sleep
頭檔案: #include <windows.h> // 在VC中使用帶上頭檔案
#include <unistd.h> // 在gcc編譯器中,使用的頭檔案因gcc版本的不同而不同
功 能 : 執行挂起指定的秒數
語 法 : unsigned sleep(unsigned seconds);
示例:


函數名: usleep
頭檔案: #include <unistd.h>
功 能: usleep功能把程序挂起一段時間, 機關是微秒(百萬分之一秒);
語 法: void usleep(int micro_seconds);
傳回值: 無
内容說明:本函數可暫時使程式停止執行。參數 micro_seconds 為要暫停的微秒數(us)。
注 意:
這個函數不能工作在windows 作業系統中。用在Linux的測試環境下面。
參 見:usleep() 與sleep()類似,用于延遲挂起程序。程序被挂起放到reday queue。一般情況下,延遲時間數量級是秒的時候,盡可能使用sleep()函數。如果延遲時間為幾十毫秒(1ms = 1000us),或者更小,盡可能使用usleep()函數。這樣才能最佳的利用CPU時間。
微秒,時間機關,符号us(英語:microsecond ).
1微秒等于百萬分之一秒(10的負6 次方秒)
0.000 001 微秒 = 1皮秒
0.001 微秒 = 1納秒
1,000 微秒 = 1毫秒
1,000,000 微秒 = 1秒
1s = 1000ms
1ms = 1000μs
1μs = 1000ns
1ns = 1000ps
1秒(s) = 1000 毫秒(ms) = 1,000,000 微秒(μs) = 1,000,000,000 納秒(ns) = 1,000,000,000,000 皮秒(ps)

=pthread_join ( a_thread,&

在代碼段中的灰色背景代碼中,這句話關系到子線程a_thread能不能正常地運作完,pthread_join讓main所在的主線程等待a_thread線程結束,才繼續從pthread_join語句中往下執行。如果沒有這一句,當子線程是比較耗時的操作,它在主線程運作到return EXIT_SUCCESS;的時候還沒有結束的話,那麼随着main所在的主線程的退出,子線程a_thread也将退出,也就是a_thread不能被正确地執行完,而是意外地退出了。
我們給pthread_join傳遞了兩個參數,一個正在等待器結束的線程的辨別符athread,另一個是指向線程傳回值的指針。這個函數将等到它所指定的線程終止後才傳回。然後main函數在pthread_join行之後,繼續執行。
errno定義在頭檔案<errno,h>中,他是一個整形的變量。當系統調用和其他庫函數發送錯誤的時候,errno用來辨別錯誤是什麼。
常用的用來報告錯誤的函數。它們是strerror和perror。
1、strerror用來将錯誤代碼errno映射成一個字元串,該字元串對發生的錯誤類型進行說明。
函數原型如下
2、perror用來把errno變量中報告的目前錯誤映射到一個字元串,并把它輸出到标準錯誤輸出流。該字元串的前面先加上字元串s(如果不為空)中給出的資訊,在加上一個冒号和一個空格。
3、一個小樣例。在下面的這個例子中,我們錯誤地打開一個不存在的檔案,産生一個errno,并用strerror和perror進行報告。


輸出的結果如下:
一個常見的錯誤用法如下所示:
當somecall引發了一個錯誤,errno被賦上值之後。你不應該直接使用errno進行其他的操作,在以上代碼段中,errno可能被printf函數改變。如果我們要使用errno,最好的辦法就是如下代碼段所示的,把它儲存在一個變量中,然後再使用。
首先注意,extern關鍵字不是用來聲明全局變量的。下面看一段錯誤的代碼
然後我們想要在下面的源檔案中引用something。


因為extern不是這麼用的。extern的出現是為了解決源檔案中的東西,不能被其他源檔案通路的問題。一般來說,假設我們要通路一個源檔案(假設是源檔案myCode.c)中的變量,那麼我們需要先在源檔案MyCode.c中定義一個變量,通常是在所有函數的開頭。然後在這個源檔案對應的頭檔案MyCode.h中用extern标志這個變量,那麼當其他源檔案MyCodeTwo.c引用了頭檔案MyCode,h的時候,就可以通路到MyCode.c中定義的變量。如下代碼段所示。




tar在linux上是常用的打包、壓縮、加壓縮工具,他的參數很多,這裡僅僅列舉常用的壓縮與解壓縮參數。
1、将整個/home/www/images 目錄下的檔案全部打包為 /home/www/images.tar
在參數f後面的壓縮檔案名是自己取的,習慣上用tar來做,如果加z參數,則以tar.gz 或tgz來代表gzip壓縮過的tar file檔案
2、将 /home/www/images.tar.gz 解壓到/home/www下面
解壓到指定的目錄
解包到指定的目錄
本文轉自陳哈哈部落格園部落格,原文連結http://www.cnblogs.com/kissazi2/p/3148053.html如需轉載請自行聯系原作者
kissazi2