工欲善其事,必先利其器
使用任何语言,必须先掌握库,只有这样才能站在巨人肩上看得更远。
C语言的库主要是libc, 嵌入式开发环境中用得最多的是uclibc。
关于库函数介绍,推荐书: 脑动力 C语言函数速查效率手册
关于库函数,个人体会做下面2个步骤可能有利于开发。
1> 将书本快速看一下,整理一个Excel文档,内容为: 函数名,参数说明,头文件,sample代码。
2> 建一个SouceInsight工程,实际开发中用到一个,就加一个该函数的测试代码。
这样有个好处,当处于非网络开发环境,可以快速查找。
并且,在特定环境下,还有必要测试下库函数,看是否有实现差异。
下面列举些常用函数:
#include <ctype.h> 字符类型判断
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 <string.h> 字符串处理
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 <conio.h> 控制台相关
int kbhit(void);
int getch(void);
int getchar(void);
int putch(int ch);
int putchar(int ch);
#include <stdio.h>
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 <io.h>
int ioctl(int fd, int request,void*);
#include <signal.h>
typdef void(*sig_t)(int);
sig_t signal(int signum, sig_t handler);
int raise(int signum);
#include <process.h>
int system(const char * cmd);
#include <stdio.h>
#include <sys\stat.h>
#include <fcntl.h>
#include <io.h>
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 <share.h>
int lock(int fd, long offset, int len);
int unlock(int fd, long offset, int len);
int close(int fd);
#include <stdlib.h>
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 <math.h>
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 <time.h>
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 <stdlib.h>
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 <assert.h>
void assert(int exp);
void perror(char* str);
char* strerror(int errno);
/* 进程控制 */
#include <stdlib.h>
void abort(void);
int exit(int ret);
int _exit(int ret);
int atexit(void(*exitfun)(void));
#include <process.h>
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环境高级编程)。
就工作的帮助价值来说,这本书在我心目中排第一。