程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 深入理解C語言-08 庫函數

深入理解C語言-08 庫函數

編輯:關於C語言

工欲善其事,必先利其器

使用任何語言,必須先掌握庫,只有這樣才能站在巨人肩上看得更遠。

C語言的庫主要是libc, 嵌入式開發環境中用得最多的是uclibc。

關於庫函數介紹,推薦書: 腦動力 C語言函數速查效率手冊

關於庫函數,個人體會做下面2個步驟可能有利於開發。
1> 將書本快速看一下,整理一個Excel文檔,內容為: 函數名,參數說明,頭文件,sample代碼。
2> 建一個SouceInsight工程,實際開發中用到一個,就加一個該函數的測試代碼。

這樣有個好處,當處於非網絡開發環境,可以快速查找。
並且,在特定環境下,還有必要測試下庫函數,看是否有實現差異。

下面列舉些常用函數:

#include 字符類型判斷

int isalpha(int ch);
int isdigit(int ch);
int isalnum(int ch);
int islower(int ch);
int isupper(int ch);
int isspace(int ch);


#include 字符串處理
char* strcpy(char*dst, char*src);
char* strncpy(char*dst, char*src, int n);
char* strcat(char*dst, char*src);
char* strncat(char*dst, char*src, int n);
char* strchr(const char*src, char ch);
char* strrchr(const char*src, char ch);
char* strstr(const char*s1, char* s2);
char* strcmp(const char*s1, char* s2);
char* stricmp(const char*s1, char* s2);
char* strnicmp(const char*s1, char* s2,int maxlen);
int strlen(char*s);
char* strlwr(char*s);
char* strupr(char*s);

#include 控制台相關
int kbhit(void);
int getch(void);
int getchar(void);
int putch(int ch);
int putchar(int ch);

#include
int printf(char* fmt[, args]);
int vprintf(char* fmt, va_list param);
int sprintf(char* buf, char* fmt[, args]);
int vsprintf(char* fmt, va_list param);

#include
int ioctl(int fd, int request,void*);

#include
typdef void(*sig_t)(int);
sig_t signal(int signum, sig_t handler);
int raise(int signum);

#include
int system(const char * cmd);

#include
#include
#include
#include
int rename(char* oldname, char* newname);
int open(char* path, int access[,int permiss]);
int read(int fd, void*buf, int nByte);
int write(int fd, void*buf, int nByte);
int eof(int fd);
int lseek(int fd, long offset, int origin);
long tell(int fd);
int isatty(int fd);

#include
int lock(int fd, long offset, int len);
int unlock(int fd, long offset, int len);

int close(int fd);

#include
FILE* fopen(char* path, char* mode);
size_t fread(void*buf, size_t size, size_t count, FILE*stream);
size_t fwrite(void*buf, size_t size, size_t count, FILE*stream);
int feof(FILE*stream);
int fseek(FILE*stream, long offset, int origin);
long ftell(FILE*stream);
int ferror(FILE*stream);
int fclose(FILE*stream);

/* buffer */
void setbuf(FILE*stream, char*buf);
int setvbuf(FILE*stream,char* buf,int type, unsigned size);
int fflush(FILE*stream);

/* format */
int fprint(FILE*stream, char* format[, args]);
int vfprint(FILE*stream, char* format, va_list param);

/* 文件權限管理 */
int chmod(char* path, int mode);
int access(char* path, int mode);
int getftime(int fd, struct ftime* pftime);
int setftime(int fd, struct ftime* pftime);
long filelength(int fd);
int setmode(int fd, unsigned mode);

#include
int abs(int i);
double sin(double x);
double cos(double x);
double exp(double x);
double log(double x);
float pow(float x, float y);
double sqrt(double x);
double ceil(double x);
double floor(double x);
void srand(unsigned seed);
int rand(void);

/* 時間函數 */
#include
void getdate(struct date* pDate);
void setdate(struct date* pDate):
void gettime(struct time* pTime);
void settime(struct time* pTime);
time_t time(time_t*timer);
double difftime(time_t t1, time_t t2);

/* 類型轉換 */
#include
char* ltoa(long value, char* str, int radix);
char* itoa(int value, char* str, int radix);
double atof(char* str);
int atoi(char* str);
long atol(char* str);
int tolower(int ch);
int toupper(int ch);

/* 錯誤處理 */
#include
void assert(int exp);
void perror(char* str);
char* strerror(int errno);

/* 進程控制 */
#include
void abort(void);
int exit(int ret);
int _exit(int ret);
int atexit(void(*exitfun)(void));

#include
int execl(char *pathname,char *arg0,char *arg1,…,char *argn,NULL);
int execle(char *pathname,char *arg0,char *arg1,…, char *argn,NULL,char *envp[]) ;
int execlp(char *pathname,char *arg0,char *arg1,…,NULL);
int execlpe(char *pathname,char *arg0,char *arg1,…,NULL,char *envp[]);
int execv(char *pathname,char *argv[]);
int execve(char *pathname,char *argv[],char *envp[]);
int execvp(char *pathname,char *argv[]);
int execvpe(char *pathname,char *argv[],char *envp[]);

int spawnl(int mode,char *pathname,char *arg0,char *arg1,…, char *argn,NULL);
int spawnle(int mode,char *pathname,char *arg0,char *arg1,…, char *argn,NULL,char *envp[]);
int spawnlp(int mode,char *pathname,char *arg0,char *arg1,…, char *argn,NULL);
int spawnlpe(int mode,char *pathname,char *arg0,char *arg1,…, char *argn,NULL,char *envp[]);
int spawnv(int mode,char *pathname,char *argv[]);
int spawnve(int mode,char *pathname,char *argv[],char *envp[]);
int spawnvp(int mode,char *pathname,char *argv[]);
int spawnvpe(int mode,char *pathname,char *argv[],char *envp[]);

/* 內存相關 */
void* calloc(unsigned n, unsigned size);
void* malloc(unsigned int size);
void free(void* ptr);

對於不清楚的函數,強烈建議看AUPE(Unix環境高級編程)。
就工作的幫助價值來說,這本書在我心目中排第一。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved