linuxC常用函數

目錄

C語言常用函數

access(char* path,int mode)函數:用於檢查文件

atoi()函數:將字符串轉換成int(整數)

execl()函數:執行文件函數

fopen()函數:打開指定路徑的文件,獲取指向該文件的指針。

fwrite()函數:將一塊內存區域中的數據寫入到本地文本

fread()函數:從一個文件流中讀取數據

fclose()函數:關閉一個流,關閉打開文件、

goto語句也稱爲無條件轉移語句

lstat函數:或取文件相關信息

Memcpy函數:從源src所指的內存地址的起始位置開始,拷貝n個字節的數據到目標dest所指的內存地址的起始位置中

open()函數:打開文件

opendir()函數:打開一個目錄,在失敗的時候返回一個空的指針。

readdir函數:讀取opendir 返回值的那個列表

pipe()函數:建立管道

S_ISDIR()函數:判斷一個路徑是否爲目錄

strcat()函數:用於拼接字符

strcpy()函數:複製字符串

strncpy()函數:用來複制字符串的前n個字符


 

access(char* path,int mode)函數:用於檢查文件

    參數path 是訪問文件所在的路徑名,mode是訪問判斷模式,是否存在(mode 00),是否只可讀(mode 02),是否只可寫(mode 04),是否可讀寫(mode 06)。

atoi()函數:將字符串轉換成int(整數)

atof()函數:將字符串轉換成float(浮點數)

頭文件:#include <stdlib.h>

原型爲:int atoi (const char * str);

返回值:返回轉換後的整型數;如果 str 不能轉換成 int 或者 str 爲空字符串,那麼將返回 0。

函數說明:atoi() 函數會掃描參數 str 字符串,跳過前面的空白字符(例如空格,tab縮進等,可以通過 isspace() 函數來檢測),直到遇上數字或正負符號纔開始做轉換,而再遇到非數字或字符串結束時('\0')才結束轉換,並將結果返回。

execl()函數:執行文件函數

頭文件: #include<unistd.h>

定義函數:intexecl(const char * path, const char * arg, ...);

函數說明:execl()用來執行參數path 字符串所代表的文件路徑, 接下來的參數代表執行該文件時傳遞過去的argv(0),argv[1], ..., 最後一個參數必須用空指針(NULL)作結束.

execl(“絕對路徑” , ”相關參數”… , ”NULL”);

返回值:如果執行成功則函數不會返回,執行失敗則直接返回-1, 失敗原因存於errno 中.

fopen()函數:打開指定路徑的文件,獲取指向該文件的指針。

原型:FILE * fopen(const char * path,const char * mode);

參數:path: 文件路徑,如:"F:\Visual Stdio 2012\test.txt"

      mode: 文件打開方式,例如:

             "r" 以只讀方式打開文件,該文件必須存在。

             "w" 打開只寫文件,若文件存在則文件長度清爲0,即該文件內容會消失。若文件不存在則建立該文件。

            "w+" 打開可讀寫文件,若文件存在則文件長度清爲零,即該文件內容會消失。若文件不存在則建立該文件。

             "a" 以附加的方式打開只寫文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾,即文件原先的內容會被保留。(EOF符保留)

             "a+" 以附加方式打開可讀寫的文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾後,即文件原先的內容會被保留。(原來的EOF符不保留)

            "wb" 只寫打開或新建一個二進制文件,只允許寫數據。

            "wb+" 讀寫打開或建立一個二進制文件,允許讀和寫。

             "ab" 追加打開一個二進制文件,並在文件末尾寫數據。

             "ab+"讀寫打開一個二進制文件,允許讀,或在文件末追加數據。  

 返回值: 文件順利打開後,指向該流的文件指針就會被返回。如果文件打開失敗則返回NULL,並把錯誤代碼存在errno中。

fwrite()函數:將一塊內存區域中的數據寫入到本地文本

原型:size_t  fwrite(const void* buffer, size_t size, size_t count, FILE* stream);

參數:buffer:指向數據塊的指針

      size:每個數據的大小,單位爲Byte(例如:sizeof(int)就是4)

      count:數據個數

      stream:文件指針

返回值:隨着調用格式的不同而不同:

    (1) 調用格式:fwrite(buf,sizeof(buf),1,fp);

    成功寫入返回值爲1(即count)

    (2)調用格式:fwrite(buf,1,sizeof(buf),fp);

    成功寫入則返回實際寫入的數據個數(單位爲Byte)

注意:寫完數據後要調用fclose()關閉流,不關閉流的情況下,每次讀或寫數據後,文件指針都會指向下一個待寫或者讀數據位置的指針。

fread()函數:從一個文件流中讀取數據

原型:size_t fread(void *buffer, size_t size, size_t count, FILE *stream);

參數:buffer:指向數據塊的指針

           size:每個數據的大小,單位爲Byte(例如:sizeof(int)就是4)

           count:數據個數

           stream:文件指針

返回值:隨着調用格式的不同而不同:

(1) 調用格式:fread(buf,sizeof(buf),1,fp);

讀取成功時:當讀取的數據量正好是sizeof(buf)個Byte時,返回值爲1(即count)

                       否則返回值爲0(讀取數據量小於sizeof(buf))

(2)調用格式:fread(buf,1,sizeof(buf),fp);

讀取成功返回值爲實際讀回的數據個數(單位爲Byte)

fclose()函數:關閉一個流,關閉打開文件、

原型:int fclose(FILE *stream);

參數:stream爲文件指針,文件描述符

返回值:如果流成功關閉,fclose 返回 0,否則返回EOF(-1)。

goto語句也稱爲無條件轉移語句

格式:goto <標號>;

其中標號需要申請,在程序開頭寫label <標號1>,<標號2>,……;

標號必須爲四位以內的正整數。

在該段落內還需要有<標號>:語句 表示將要轉向的方向。

lstat函數:或取文件相關信息

原型: int lstat(const char *path, struct stat *buf);   

參數:path:文件路徑名。filedes:文件描述詞。buf:是以下結構體的指針

   struct stat {   

dev_t st_dev; /* 文件所在設備的標識 */   

ino_t st_ino; /* 文件結點號 */   

mode_t st_mode; /* 文件保護模式 */   

nlink_t st_nlink; /* 硬連接數 */   

uid_t st_uid; /* 文件用戶標識 */   

gid_t st_gid; /* 文件用戶組標識 */   

dev_t st_rdev; /* 文件所表示的特殊設備文件的設備標識 */   

off_t st_size; /* 總大小,字節爲單位 */   

blksize_t st_blksize; /* 文件系統的塊大小 */   

blkcnt_t st_blocks; /* 分配給文件的塊的數量,512字節爲單元 */   time_t st_atime; /* 最後訪問時間 */   

time_t st_mtime; /* 最後修改時間 */   

time_t st_ctime; /* 最後狀態改變時間 */   

};

返回值:成功執行時,返回0。失敗返回-1,errno被設爲以下的某個值   

EBADF: 文件描述詞無效   EFAULT: 地址空間不可訪問   ELOOP: 遍歷路徑時遇到太多的符號連接   ENAMETOOLONG:文件路徑名太長   ENOENT:路徑名的部分組件不存在,或路徑名是空字串   ENOMEM:內存不足   ENOTDIR:路徑名的部分組件不是目錄

Memcpy函數:從源src所指的內存地址的起始位置開始,拷貝n個字節的數據到目標dest所指的內存地址的起始位置中

頭文件:#include<string.h>

原型:void *memcpy(void*dest, const void *src, size_t n);

說明: 

  1. src和dest所指內存區域不能重疊,函數返回指向dest的指針。如果src和dest以任何形式出現了重疊,它的結果是未定義的。
  2. 與strcpy相比,memcpy遇到’\0’不結束,而且一定會複製完n個字節。只要保證src開始有n字節的有效數據,dest開始有n字節內存空間就行。
  3. 如果目標數組本身已有數據,執行memcpy之後,將覆蓋原有數據(最多覆蓋n個)。如果要追加數據,則每次執行memcpy()後,要將目標地址增加到要追加數據的地址。
  4. source和destin都不一定是數組,任意的可讀寫的空間均可。

open()函數:打開文件

頭文件:#include <sys/types.h>    #include <sys/stat.h>    #include <fcntl.h>

定義函數:int open(const char * pathname, int flags);

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

返回值:若成功則返回0,否則返回-1。

opendir()函數:打開一個目錄,在失敗的時候返回一個空的指針。

頭文件:#include<sys/types.h>

  #include<dirent.h>

原型:DIR* opendir (const char * path ); (獲取path子目錄下的所由文件和目錄的列表,如果path是個文件則返回值爲NULL)

返回值(DIR): DIR 結構體的原型爲:struct_dirstream

readdir函數:讀取opendir 返回值的那個列表

頭文件:#include<dirent.h>

原型:struct dirent* readdir(DIR* dir_handle); (個人理解循環讀取dir_handle,目錄和文件都讀)

返回值:返回dirent結構體指針,dirent結構體

pipe()函數:建立管道

頭文件:#include<unistd.h>

定義函數:int pipe(int filedes[2]);

函數說明:pipe()會建立管道,並將文件描述詞由參數 filedes 數組返回。

    filedes[0]爲管道里的讀取端,所以pipe用read調用的

    filedes[1]則爲管道的寫入端。

返回值: 若成功則返回零,否則返回-1,錯誤原因存於 errno 中。

S_ISDIR()函數:判斷一個路徑是否爲目錄

         S_ISDIR( statbuf.st_mode )的函數功能是判斷statbuf所指向文件(也就是FileName)是否爲目錄(dir)類型。

strcat()函數:用於拼接字符

接受兩個字符串作爲參數。該函數把第2個字符串的備份附加在第1個字符串末尾,並把拼接後形成的新字符串作爲第1個字符串,第二個字符串不變。

strcat()函數的類型是char *(即,指向char的指針)。strcat()函數返回第一個參數,即拼接第2個字符串後的第1個字符串的地址。

strcpy()函數:複製字符串

頭文件:#include<string.h>

原型:extern char *strcpy(char *dest,char *src);

功能:把src所指由NULL結束的字符串複製到dest所指的數組中

說明:src和dest所指內存區域不可以重疊且dest必須有足夠的空間來容納src的字符串。

返回指向dest的指針。

strncpy()函數:用來複制字符串的前n個字符

頭文件:#include <string.h>

原型:char * strncpy(char *dest, const char *src, size_t n);

參數說明:dest 爲目標字符串指針,src 爲源字符串指針。

說明:strncpy()會將字符串src前n個字符拷貝到字符串dest。

使用strncpy()最安全方式是使n等於strlen(src)+1,即拷貝整個字符串,同時將'\0'追加到dest。但這又與strcmp()的作用沒有什麼兩樣

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章