工欲善其事,必先利其器
使用任何語言,必須先掌握庫,只有這樣才能站在巨人肩上看得更遠。
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環境高級編程)。
就工作的幫助價值來說,這本書在我心目中排第一。