linux文件操作_第1頁(yè)
linux文件操作_第2頁(yè)
linux文件操作_第3頁(yè)
linux文件操作_第4頁(yè)
linux文件操作_第5頁(yè)
已閱讀5頁(yè),還剩37頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、extern用法 在別的文件中定義的變量,要想在本文件中使用,在別的文件中定義的變量,要想在本文件中使用,必須先用必須先用externextern聲明聲明,例如:,例如:extern a;extern a;之后就當(dāng)之后就當(dāng)成在本文件中定義的變量一樣使用成在本文件中定義的變量一樣使用 外部變量(即全局變量)是在函數(shù)的外部定義的,外部變量(即全局變量)是在函數(shù)的外部定義的,它的作用域?yàn)閺淖兞慷x處開始,到本程序文件它的作用域?yàn)閺淖兞慷x處開始,到本程序文件的末尾。如果外部變量不在文件的開頭定義,其的末尾。如果外部變量不在文件的開頭定義,其有效的作用范圍只限于定義處到文件終了。如果有效的作用范圍只限

2、于定義處到文件終了。如果在定義點(diǎn)之前的函數(shù)想引用該外部變量,則應(yīng)該在定義點(diǎn)之前的函數(shù)想引用該外部變量,則應(yīng)該在引用之前用關(guān)鍵字在引用之前用關(guān)鍵字externextern對(duì)該變量作對(duì)該變量作“外部變外部變量聲明量聲明”。表示該變量是一個(gè)已經(jīng)定義的外部變。表示該變量是一個(gè)已經(jīng)定義的外部變量。有了此聲明,就可以從量。有了此聲明,就可以從“聲明聲明”處起,合法處起,合法地使用該外部變量。地使用該外部變量。staticstatic 類型聲明符在類型聲明符在C語(yǔ)言里面主要有三個(gè)用途:語(yǔ)言里面主要有三個(gè)用途:1、聲明靜態(tài)局部變量、聲明靜態(tài)局部變量2、聲明靜態(tài)外部全局變量、聲明靜態(tài)外部全局變量3、聲明靜態(tài)外部

3、函數(shù)、聲明靜態(tài)外部函數(shù)靜態(tài)局部變量靜態(tài)局部變量(與auto對(duì)比) 1、 存儲(chǔ)空間分配、作用域和生存期存儲(chǔ)空間分配、作用域和生存期static分配在靜態(tài)存儲(chǔ)區(qū),作用域僅僅限于聲明該變量的函數(shù)內(nèi)部。在程序整個(gè)運(yùn)行期間都不釋放,生存期貫穿于程序運(yùn)行的整個(gè)過(guò)程。auto類型分配在棧上,屬于動(dòng)態(tài)存儲(chǔ)類別,占動(dòng)態(tài)存儲(chǔ)區(qū)空間,作用域僅僅限于聲明該變量的函數(shù)內(nèi)部。函數(shù)調(diào)用結(jié)束后自動(dòng)釋放,生存期不過(guò)是在聲明該變量的函數(shù)內(nèi)部。2、賦初值時(shí)的處理方式、賦初值時(shí)的處理方式 static靜態(tài)局部變量在編譯時(shí)賦初值,即只賦初值一次;auto自動(dòng)變量賦初值是在函數(shù)調(diào)用時(shí)進(jìn)行,每調(diào)用一次函數(shù)重新給一次初值,相當(dāng)于執(zhí)行一次賦值

4、語(yǔ)句。3、未賦初值時(shí)的處理方式、未賦初值時(shí)的處理方式 如果在定義局部變量時(shí)不賦初值的話:static靜態(tài)局部變量,編譯時(shí)自動(dòng)賦初值0(對(duì)數(shù)值型變量)或空字符(對(duì)字符變量)。auto自動(dòng)變量,如果不賦初值則它的值是一個(gè)不確定的值。 int fun (void);int main (void) int x; x=fun(); printf( First transfer function a is %dn, x); x=fun(); printf( Second transfer function a is %dn, x); x=fun(); printf( Third transfer func

5、tion a is %dn, x); return 0; int fun (void) int a=0; a+=100; return a; 程序結(jié)果為: First transfer function a is 100 Second transfer function a is 100 Third transfer function a is 100 那么我們稍稍做下修改,將fun中的a定義成static intfun函數(shù)如下:int fun (void) static int a=0; a+=100; return a; int fun (void);int main (void) int

6、 x; x=fun(); printf( First transfer function a is %dn, x); x=fun(); printf( Second transfer function a is %dn, x); x=fun(); printf( Third transfer function a is %dn, x); return 0; int fun (void) static int a=0; a+=100; return a; 程序執(zhí)行結(jié)果: First transfer function a is 100 Second transfer function a is

7、200 Third transfer function a is 300 靜態(tài)外部全局變量靜態(tài)外部全局變量 在C語(yǔ)言中static還用來(lái)聲明靜態(tài)外部全局變量,那么這個(gè)全局變量的作用域就被限制在本文件內(nèi)部。 外部變量(即全局變量)是在函數(shù)的外部定義的,它的作用域?yàn)閺淖兞慷x處開始,到本程序文件的末尾。如果外部變量不在文件的開頭定義,其有效的作用范圍只限于定義處到文件終了。如果在定義點(diǎn)之前的函數(shù)想引用該外部變量,則應(yīng)該在引用之前用關(guān)鍵字extern對(duì)該變量作“外部變量聲明”。表示該變量是一個(gè)已經(jīng)定義的外部變量。有了此聲明,就可以從“聲明”處起,合法地使用該外部變量。 static int a;in

8、t fun (void);void fun2(int y);int main (void) int x; fun2(100); x=fun(); printf( First transfer function a is %dn, x); x=fun(); printf( Second transfer function a is %dn, x); x=fun(); printf( Third transfer function a is %dn, x); return 0; int fun (void) a+=100; return a;void fun2(int y) a=y; 程序結(jié)果為:

9、 First transfer function a is 200 Second transfer function a is 300 Third transfer function a is 400Linux標(biāo)準(zhǔn)I/O流文件fopen ()函數(shù) 表頭文件 #include 定義函數(shù) FILE * fopen( const char * path, const char * mode); 函數(shù)說(shuō)明 參數(shù)path字符串包含欲打開的文件路徑及文件名,參數(shù)mode字符串則代表著流形態(tài)。mode有下列幾種形態(tài)字符串:r 打開只讀文件,該文件必須存在。r+ 打開可讀寫的文件,該文件必須存在。w 打開只寫

10、文件,若文件存在則文件長(zhǎng)度清為0,即該文件內(nèi)容會(huì)消失。若文件不存在則建立該文件。w+ 打開可讀寫文件,若文件存在則文件長(zhǎng)度清為零,即該文件內(nèi)容會(huì)消失。若文件不存在則建立該文件。a 以附加的方式打開只寫文件。若文件不存在,則會(huì)建立該文件,如果文件存在,寫入的數(shù)據(jù)會(huì)被加到文件尾,即文件原先的內(nèi)容會(huì)被保留。a+ 以附加方式打開可讀寫的文件。若文件不存在,則會(huì)建立該文件,如果文件存在,寫入的數(shù)據(jù)會(huì)被加到文件尾后,即文件原先的內(nèi)容會(huì)被保留。上述的形態(tài)字符串都可以再加一個(gè)b字符,如rb、w+b 或ab等組合,加入b 字符用來(lái)告訴函數(shù)庫(kù)打開的文件為二進(jìn)制文件,而非純文字文件。不過(guò)在POSIX系統(tǒng),包含Lin

11、ux都會(huì)忽略該字符。返回值 文件順利打開后,指向該流的文件指針就會(huì)被返回。若果文件打開失敗則返回NULL,并把錯(cuò)誤代碼存在errno 中。 #includemain()FILE * fp;fp=fopen ( “noexist”, ”a+”);if (fp= =NULL) return;fclose (fp);fclose() 函數(shù) 表頭文件 #include 定義函數(shù) int fclose (FILE * stream); 函數(shù)說(shuō)明 fclose()用來(lái)關(guān)閉先前fopen()打開的文件。此動(dòng)作會(huì)讓緩沖區(qū)內(nèi)的數(shù)據(jù)寫入文件中,并釋放系統(tǒng)所提供的文件資源。返回值 若關(guān)文件動(dòng)作成功則返回0,有錯(cuò)誤發(fā)

12、生時(shí)則返回EOF并把錯(cuò)誤代碼存到errno。 #include int main() FILE *fp; fp = fopen (aa.txt, r); /以只讀方式打開aa.txt文件 if (fp = NULL) printf ( fail to open file !n); return -1; printf(open file successfully !n); fclose (fp);/關(guān)閉文件 return 0; fread()函數(shù) 表頭文件 #include 定義函數(shù) size_t fread(void * ptr,size_t size,size_t nmemb,FILE *

13、stream); 函數(shù)說(shuō)明 fread()用來(lái)從文件流中讀取數(shù)據(jù)。參數(shù)stream為已打開的文件指針,參數(shù)ptr 指向欲存放讀取進(jìn)來(lái)的數(shù)據(jù)空間,讀取的字符數(shù)以參數(shù)size*nmemb來(lái)決定。fread()會(huì)返回實(shí)際讀取到的nmemb數(shù)目,如果此值比參數(shù)nmemb 來(lái)得小,則代表可能讀到了文件尾或有錯(cuò)誤發(fā)生,這時(shí)必須用feof()或ferror()來(lái)決定發(fā)生什么情況。返回值 返回實(shí)際讀取到的nmemb數(shù)目。fwrite()函數(shù) 表頭文件 #include 定義函數(shù) size_t fwrite (const void * ptr,size_t size,size_t nmemb,FILE * st

14、ream); 函數(shù)說(shuō)明 fwrite()用來(lái)將數(shù)據(jù)寫入文件流中。參數(shù)stream為已打開的文件指針,參數(shù)ptr 指向欲寫入的數(shù)據(jù)地址,總共寫入的字符數(shù)以參數(shù)size*nmemb來(lái)決定。fwrite()會(huì)返回實(shí)際寫入的nmemb數(shù)目。 返回值 返回實(shí)際寫入的nmemb數(shù)目。rewind()和fseek ()函數(shù) #include void rewind (FILE *fp) 作用:使文件fp的位置指針指向文件開始。 int fseek (FILE *stream, long offset, int whence); 作用:移動(dòng)文件內(nèi)部位置指針fseek函數(shù)調(diào)用形式為: fseek(文件指針,位移

15、量,起始點(diǎn)); 其中:“文件指針”指向被移動(dòng)的文件。 “位移量”表示移動(dòng)的字節(jié)數(shù),要求位移量是long型數(shù)據(jù),以便在文件長(zhǎng)度大于64KB 時(shí)不會(huì)出錯(cuò)。當(dāng)用常量表示位移量時(shí),要求加后綴“L”?!捌鹗键c(diǎn)”表示從何處開始計(jì)算位移量,規(guī)定的起始點(diǎn)有三種:文件首,當(dāng)前位置和文件尾。其表示方法如表。 起始點(diǎn) 表示符號(hào) 數(shù)字表示 文件首 SEEK-SET 0 當(dāng)前位置 SEEK-CUR 1 文件末尾 SEEK-END 2 例如: fseek(fp,100L,0);其意義是把位置指針移到離文件首100個(gè)字節(jié)處。還要說(shuō)明的是fseek函數(shù)一般用于二進(jìn)制文件。在文本文件中由于要進(jìn)行轉(zhuǎn)換,故往往計(jì)算的位置會(huì)出現(xiàn)錯(cuò)誤

16、。文件的隨機(jī)讀寫在移動(dòng)位置指針之后, 即可用前面介紹的任一種讀寫函數(shù)進(jìn)行讀寫。由于一般是讀寫一個(gè)數(shù)據(jù)據(jù)塊,因此常用fread和fwrite函數(shù)。下面用例題來(lái)說(shuō)明文件的隨機(jī)讀寫。 int main(void) FILE *fp; char msg = this is a test; char buf20; if (fp = fopen(DUMMY.FIL, w+)= NULL) fprintf ( stderr, Cannot open output file.n); return -1; fwrite(msg, strlen(msg)+1, 1, fp); /fseek (fp, SEEK_S

17、ET, 0); rewind(fp); fread (buf, 1, strlen(msg)+1, fp); printf(%sn, buf); fclose(fp); return 0; fgetc()函數(shù) 表頭文件 include 定義函數(shù) fgetc(FILE * stream); 函數(shù)說(shuō)明 fgetc()從參數(shù)stream所指的文件中讀取一個(gè)字符。若讀到文件尾而無(wú)數(shù)據(jù)時(shí)便返回EOF。 返回值 getc()會(huì)返回讀取到的字符,若返回EOF則表示到了文件尾。 #includemain()FILE *fp;int c;fp=fopen(“exist”,”r”);while(c=fgetc(f

18、p)!=EOF)printf(“%c”,c);fclose(fp);fputc() 函數(shù) 表頭文件 #include 定義函數(shù) int fputc(int c,FILE * stream); 函數(shù)說(shuō)明 fputc 會(huì)將參數(shù)c 轉(zhuǎn)為unsigned char 后寫入?yún)?shù)stream 指定的文件中。 返回值 fputc()會(huì)返回寫入成功的字符,即參數(shù)c。若返回EOF則代表寫入失敗。 #includemain()FILE * fp;char a26=”abcdefghijklmnopqrstuvwxyz”;int i;fp= fopen(“noexist”,”w”);for(i=0;i26;i+)f

19、putc(ai,fp);fclose(fp);fgets()函數(shù) 表頭文件 include 定義函數(shù) char * fgets(char * s,int size,FILE * stream); 函數(shù)說(shuō)明 fgets()用來(lái)從參數(shù)stream所指的文件內(nèi)讀入字符并存到參數(shù)s所指的內(nèi)存空間,直到出現(xiàn)換行字符、讀到文件尾或是已讀了size-1個(gè)字符為止,最后會(huì)加上NULL作為字符串結(jié)束。 返回值 fgets()若成功則返回s指針,返回NULL則表示有錯(cuò)誤發(fā)生。fputs()函數(shù) 表頭文件 #include 定義函數(shù) int fputs(const char * s,FILE * stream);

20、函數(shù)說(shuō)明 fputs()用來(lái)將參數(shù)s所指的字符串寫入到參數(shù)stream所指的文件內(nèi)。 返回值 若成功則返回寫出的字符個(gè)數(shù),返回EOF則表示有錯(cuò)誤發(fā)生。 #includemain()char s80;fputs(fgets(s,80,stdin),stdout);Linux c 編程之系統(tǒng)調(diào)用 open,打開一個(gè)文件或設(shè)備。 close,關(guān)閉一個(gè)打開的文件或設(shè)備。 read,從一個(gè)打開的文件或者設(shè)備中讀取信息。 write,寫入一個(gè)文件或設(shè)備。open ( )函數(shù) 表頭文件 #include#include#include 定義函數(shù) int open(const char *pathname,

21、int flags); int open(const char *pathname, int flags, mode_t mode); 函數(shù)說(shuō)明:參數(shù)pathname 指向欲打開的文件路徑或文件名 返回值:成功則返回文件描述符(0-255),否則返回 -1 下列是參數(shù)flags 所能使用的旗標(biāo):O_RDONLY 以只讀方式打開文件O_WRONLY 以只寫方式打開文件O_RDWR 以可讀寫方式打開文件。上述三種旗標(biāo)是互斥的,也就是不可同時(shí)使用,但可與下列的旗標(biāo)利用OR(|)運(yùn)算符組合。O_CREAT 若欲打開的文件不存在則自動(dòng)建立該文件。O_EXCL 如果O_CREAT 也被設(shè)置,此指令會(huì)去檢查

22、文件是否存在。文件若不存在則建立該文件,否則將導(dǎo)致打開文件錯(cuò)誤。 此外,若O_CREAT與O_EXCL同時(shí)設(shè)置,并且欲打開的文件為符號(hào)連接,則會(huì)打開文件失敗。O_NOCTTY 如果欲打開的文件為終端機(jī)設(shè)備時(shí),則不會(huì)將該終端機(jī)當(dāng)成進(jìn)程控制終端機(jī)。 O_TRUNC 若文件存在并且以可寫的方式打開時(shí),此旗標(biāo)會(huì)令文件長(zhǎng)度清為0,而原來(lái)存于該文件的資料也會(huì)消失。O_APPEND 當(dāng)讀寫文件時(shí)會(huì)從文件尾開始移動(dòng),也就是所寫入的數(shù)據(jù)會(huì)以附加的方式加入到文件后面。O_NONBLOCK 以不可阻斷的方式打開文件,也是無(wú)論有無(wú)數(shù)據(jù)讀取或等待,都會(huì)立即返回進(jìn)程之中。O_NDELAY 同O_NONBLOCK。O_SY

23、NC 以同步的方式打開文件。O_NOFOLLOW 如果參數(shù)pathname 所指的文件為一符號(hào)連接,則會(huì)令打開文件失敗。O_DIRECTORY 如果參數(shù)pathname 所指的文件并非為一目錄,則會(huì)令打開文件失敗。 參數(shù)mode 則有下列數(shù)種組合,只有在建立新文件時(shí)才會(huì)生效。S_IRWXU00700 權(quán)限,代表該文件所有者具有可讀、可寫及可執(zhí)行的權(quán)限。 S_IRUSR 或S_IREAD,00400權(quán)限,代表該文件所有者具有可讀取的權(quán)限。S_IWUSR 或S_IWRITE,00200 權(quán)限,代表該文件所有者具有可寫入的權(quán)限。S_IXUSR 或S_IEXEC,00100 權(quán)限,代表該文件所有者具有

24、可執(zhí)行的權(quán)限。S_IRWXG 00070權(quán)限,代表該文件用戶組具有可讀、可寫及可執(zhí)行的權(quán)限。 S_IRGRP 00040 權(quán)限,代表該文件用戶組具有可讀的權(quán)限。S_IWGRP 00020權(quán)限,代表該文件用戶組具有可寫入的權(quán)限。S_IXGRP 00010 權(quán)限,代表該文件用戶組具有可執(zhí)行的權(quán)限。S_IRWXO 00007權(quán)限,代表其他用戶具有可讀、可寫及可執(zhí)行的權(quán)限。S_IROTH 00004 權(quán)限,代表其他用戶具有可讀的權(quán)限S_IWOTH 00002權(quán)限,代表其他用戶具有可寫入的權(quán)限。S_IXOTH 00001 權(quán)限,代表其他用戶具有可執(zhí)行的權(quán)限。 creat ()函數(shù) 表頭文件 #inclu

25、de#include#include 定義函數(shù) int creat(const char * pathname, mode_t mode); creat()相當(dāng)于使用下列的調(diào)用方式調(diào)用open()open(const char *pathname ,(O_CREAT|O_RDONLY|O_TRUNC); 返回值:文件描述符(成功)或者 -1(出錯(cuò)) read()函數(shù) 表頭文件 #include 定義函數(shù) ssize_t read(int fd,void * buf ,size_t count); 函數(shù)說(shuō)明 read()會(huì)把參數(shù)fd 所指的文件傳送count個(gè)字節(jié)到buf指針?biāo)傅膬?nèi)存中。若參數(shù)

26、count為0,則read()不會(huì)有作用并返回0。返回值為實(shí)際讀取到的字節(jié)數(shù),如果返回0,表示已到達(dá)文件尾或是無(wú)可讀取的數(shù)據(jù),此外文件讀寫位置會(huì)隨讀取到的字節(jié)移動(dòng)。 #include #include #include int main() char c int in, out; in = open(file.in, O_RDONLY); out = open(file.out,O_WRONLY | O_CREAT,S_IWUSR | S_IRUSR); while (read(in,&c,1) = 1) write(out,&c,1); exit(0); write ()函數(shù) 表頭文件 #include 定義

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論