技術(shù)員聯(lián)盟提供win764位系統(tǒng)下載,win10,win7,xp,裝機(jī)純凈版,64位旗艦版,綠色軟件,免費(fèi)軟件下載基地!

當(dāng)前位置:主頁 > 教程 > 服務(wù)器類 >

Linux環(huán)境編程-文件基本操作

來源:技術(shù)員聯(lián)盟┆發(fā)布時間:2018-04-28 06:02┆點(diǎn)擊:

  Linux 下目錄是/這樣的 而windows是怎么記呢?和w是不是一樣的反向?所以Linux的目錄就是反的反向,好記了。

  一:open函數(shù)

  名稱:open

  目標(biāo):打開一個文件。

  頭文件:#include

  #include

  #include < fcntl.h>

  函數(shù)原形:int open(const char * pathname,int flags);

  int open(const char * pathname,int flags,mode_t mode);

  參數(shù): pathname 文件名

  flags 打開模式

  返回值:-1 遇到錯誤

  int 打開成功,返回文件描述符。

  這個系統(tǒng)調(diào)用在進(jìn)程和文件之間建立一條連接,這個連接被稱為文件描述符,它就像一條由進(jìn)程通向內(nèi)核的管道。

  要打開一個文件,必須指定文件名和打開模式,有3種打開模式:只讀,只寫,可讀可寫,分別對應(yīng)于O_RDONLY,O_WRONLY,O_RDWR,這在頭文件/usr/include/fcntl.h中有定義。

  打開文件是內(nèi)核提供的服務(wù),如果在打開過程中內(nèi)核檢測到任何錯誤,這個系統(tǒng)調(diào)用就會返回-1。錯誤的類型是各種各樣的,如:要打開的文件不存在。即使文件存在可能因?yàn)闄?quán)限不夠而無法打開,在open的聯(lián)機(jī)幫助中列出了各種可能的錯誤,大家可以看看。

  UNIX允許一個文件被多個進(jìn)程訪問,也就是說當(dāng)一個文件被一個進(jìn)程打開后,這個文件還可以被其它進(jìn)程打開。

  如果文件被順利打開內(nèi)核會返回一個正整數(shù)的值,這個數(shù)值就叫文件描述符,文件描述符是是一個簡單的整數(shù),用以標(biāo)明每一個被進(jìn)程所打開的文件,描述符0代表標(biāo)準(zhǔn)輸出,對應(yīng)的宏是 STDOUT_FILENO,描述符1代表標(biāo)準(zhǔn)輸入,對應(yīng)的宏為STDIN_FILENO,描述符2代表標(biāo)準(zhǔn)錯誤輸出,對應(yīng)的宏為STDERR_FILENO,系統(tǒng)給進(jìn)程分配描述符都是從3開始的,如果同時打開好幾個文件,它們所對應(yīng)的的文件描述符是不同的,如果一個文件打開多次,對應(yīng)的文件描述符也不相同。必須通過文件描述符對文件操作。下面的程序可以證明這一點(diǎn)。

  二:read函數(shù)

  名稱:read

  目標(biāo):把數(shù)據(jù)讀到緩沖區(qū)。

  頭文件:#include < unistd.h>

  函數(shù)原形:ssize_t read(int fd, void *buf, size_t count)

  參數(shù): fd 文件描述符

  buf 用來存放數(shù)據(jù)的目的緩沖區(qū)

  count 要讀取的字節(jié)數(shù)

  返回值:-1 遇到錯誤

  numread 成功關(guān)閉,返回所讀取的字節(jié)數(shù)目。

  read這個系統(tǒng)調(diào)用請求內(nèi)核從fd所指定的文件中讀取qty字節(jié)的數(shù)據(jù),存放到buf所指定的內(nèi)存空間中,內(nèi)核如果成功地讀取了數(shù)據(jù),就返回所讀取的字節(jié)數(shù)目。否則返回-1。

  當(dāng)文件的字節(jié)數(shù)沒有你想要的那么多時,read就會判斷下一個數(shù)值是不是’’,如果是就停止讀取,然后退出。numread返回的是’’之前的字節(jié)數(shù),也就是是原文件的字節(jié)數(shù)而不是你想讀的字節(jié)數(shù)。

  三:close函數(shù)

  名稱:close

  目標(biāo):關(guān)閉一個文件。

  頭文件:#include < unistd.h>

  函數(shù)原形:int close(int fd)

  參數(shù): fd 文件描述符

  返回值:-1 遇到錯誤

  int 關(guān)閉成功,返回文件描述符。

  Close這個系統(tǒng)調(diào)用會關(guān)閉進(jìn)程和文件fd之間的連接,如果關(guān)閉過程中出現(xiàn)錯誤,close返回-1,如:fd所指的文件并不存在。關(guān)閉成功則返回文件描述符。

  代碼: 一個基本的打開文件,讀取,并關(guān)閉的例子

  #include

  #include

  #include

  #include

  #include

  #include

  main()

  {

  int fd,size;

  char s [ ]="Linux Programmer!n",buffer[1024];

  fd=open("show_read.c",O_RDONLY);

  size=read(fd,buffer,sizeof(buffer));

  close(fd);

  printf("%s",buffer);

  }

  四:craet函數(shù)

  名稱:creat

  目標(biāo):創(chuàng)建/重寫一個文件

  頭文件:#include

  #include

  #include < fcntl.h>

  函數(shù)原形:int creat(const char *pathname,mode_t mode)

  參數(shù): pathname 文件名

  mode 訪問模式

  返回值:-1 遇到錯誤

  fd 創(chuàng)建成功,返回文件描述符

  Creat告訴內(nèi)核創(chuàng)建一個名為filename的文件,如果這個文件不存在,就創(chuàng)建它,如果已經(jīng)存在,就把它的內(nèi)容清空,把文件的長度設(shè)為0。

  如果內(nèi)核成功地創(chuàng)建了文件,那么文件的許可位(permission bits)被設(shè)置為由第二個參數(shù)mode所指定的值.如:

  fd=creat(“addressbook”,0644);

  創(chuàng)建一個名為addressbook的文件,如果文件不存在,那么文件的許可位被設(shè)為 rw-r-r—.

  如果文件已存在它的內(nèi)容會被清空。任一情況下,fd都會是指向addressbook的文件描述符。

  五:write函數(shù)

  名稱:write

  目標(biāo): 將內(nèi)存中的數(shù)據(jù)寫入文件。

  頭文件:#include < unistd.h>

  函數(shù)原形:size_t write(int fd, const void *buf, size_t count)

  參數(shù): fd 文件描述符

  buf 內(nèi)存數(shù)據(jù)

  count 要寫的字節(jié)數(shù)

  返回值: -1 遇到錯誤

  Num written 成功寫入,返回寫入的字節(jié)數(shù)目。