1 isspace函数
函数功能:监测参数是否为空格。
成功返回为true
2 va_list,va_start,va_end
为解决可变参数的一组宏
如 void fun(int i,...);//用三点代表的是可变参数,注意第一个参数是固定的。
va_list:可变参数类型。typedef char * va_list//(1) va_list para;
void va_start(va_list arg_ptr, prev_param);//(2) va_start(para, i);
arg_ptr指向第一个可变参数在堆栈上的地址。//三点代表的部分
type va_arg( va_list arg_ptr, type );//返回可变参数的值
va_end(ap);使va_list类型指针不在指向堆栈内存
举例用法:
e.g1:
//va_fun(100,200);
3. 关于时间函数
//详细可见http://www.xxlinux.com/linux/article/development/soft/20061101/5607.html
char * asctime(const struct tm * timeptr);
将参数timeptr所指的tm结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果以字符串形态返回。此函数已经由时区转换成当地时间,字符串格式为:“Wed Jun 30 21:49:08 1993/n”
char *ctime(const time_t * timep);
将参数timep所指的time_t结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果以字符串形态返回。此函数已经由时区转换成当地时间,字符串格式为“Wed Jun 30 21 :49 :08 1993/n”
struct tm*gmtime(const time_t*timep);
将参数timep 所指的time_t 结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果由结构tm返回
struct tm *localtime(const time_t * timep);
将参数timep所指的time_t结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果由结构tm返回。结构tm的定义请参考gmtime()。此函数返回的时间日期已经转换成当地时区
time_t time(time_t *t);
返回从公元1970年1月1日的UTC时间从0时0分0秒算起到现在所经过的秒数。
如果t 并非空指针的话,此函数也会将返回值存到t指针所指的内存
一般获得系统时间用法:
struct tm* tp
long secs;
secs = time((long *)0);
tp = localtime(&secs);
printf("%04d%02d%02d", tp->tm_year + 1900, tp->tm_month +1, tp->tm_mday);
注意:
struct tm
{
}
//tm_year 从1900年算起至今的年数。
//tm_month目前月份,0~11
//tm_day目前月份的日期数
4 vfprintf
printf;
fprintf;
int vfprintf(FILE *fp, const char *fmt, va_list ap);
根据fmt字符串来转换并格式化数据,然后将结果输出到参数fp所指定的文件中。直到出现字符串结束为止。
int sscanf(const char *str, const char *fmt,...);
将参数str的字符串根据参数fmt字符串来转换并格式化数据。转换后的结果存于对应的参数内。
如
char buf = {"127.0.0.1 8080"}
char hostIP[21];
int port;
sscanf(buf, "%s %d",hostIP, & port);//取地址符勿丢。
//对于提取字符串中的记录很有效。要注意字符串内各个部分可以用空格(一个或多个),/n,/t等分隔符隔开。这对于读出文件中保存的数据
到字符串,然后分别得到对应的值,非常有用的一个用法。
(strtok 函数也很不错)
5 典型文件操作函数
char *fgets(char *s, int size, FILE *fp);
//从fp文件中读入字符并存到s所指的内存空间。直到出现换行字符,读到文件结尾或是已经读了size-1个字符为止 。
若成功返回s指针,返回NULL则表示有误。(多用于读出一行数据)
int fputs(const char *s, FILE *fp);//
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *fp);
//从文件流读取数据。对于结构体的操作多用此函数来读。
struct test
{
char name[20];
int size;
}s[3];
FILE *fp = fopen("...");
如fread(s, sizeof(struct test), 3 , fp);
fwrite()
//块状读,块状写
fprintf
fscanf
6. 对命令行参数解析
//详细见 http://apps.hi.baidu.com/share/detail/16245935
如 ./run {-s,-x} -c input.cfg
关于struct option
struct option{
const char *name;
int has_arg;
int *flag;
int val;
};
struct option longopts[] =
{
{"start",0,NULL,'s'},
{"config", 1, NULL, 'c'},
...
{0,0,0,0}
}
getopt_long()
int getopt_long(int argc, char * const argv[], const char *optstring, const struct option *longopts, int *longindex);
//http://blog.csdn.net/kenby/archive/2009/04/06/4051604.aspx也讲得很好。