目錄
C語言常用函數
access(char* path,int mode)函數:用於檢查文件
fopen()函數:打開指定路徑的文件,獲取指向該文件的指針。
Memcpy函數:從源src所指的內存地址的起始位置開始,拷貝n個字節的數據到目標dest所指的內存地址的起始位置中
opendir()函數:打開一個目錄,在失敗的時候返回一個空的指針。
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);
說明:
- src和dest所指內存區域不能重疊,函數返回指向dest的指針。如果src和dest以任何形式出現了重疊,它的結果是未定義的。
- 與strcpy相比,memcpy遇到’\0’不結束,而且一定會複製完n個字節。只要保證src開始有n字節的有效數據,dest開始有n字節內存空間就行。
- 如果目標數組本身已有數據,執行memcpy之後,將覆蓋原有數據(最多覆蓋n個)。如果要追加數據,則每次執行memcpy()後,要將目標地址增加到要追加數據的地址。
- 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()的作用沒有什麼兩樣