LINUX编程学习
作者:罗小强 beauty9235(at)gmail.com
发布记录:Sun Dec 27 16:33:01 CST 2009
文档说明
参与人员:
作者
|
联络
|
罗小强
|
beauty9235 beauty9235(at)gmail.com
|
(at) 为email @ 符号
发布记录
版本
|
日期
|
作者
|
说明
|
1.0
|
08年12月18日
|
罗小强
|
第一版
|
|
|
|
|
|
|
|
|
|
|
|
|
删除所.svn. 2
c.vim.. 2
获取格式化时间... 2
strtok的使用... 2
strcpy ,strncasecmp, strsep, calloc,free的使用... 2
enum的使用... 3
字符串匹配... 3
字符串组合... 5
字符串数组引用调用及文件流的读取... 5
文件流的读取与写入... 6
va_list、va_start、va_arg、va_end的原理与使用... 6
find ./ -name ".svn" | xargs rm –rf
下载地址 http://www.vim.org/scripts/script.php?script_id=213
unzip cvim.zip -d ./cvim
mv software/cvim .vim
修改个人设置./.vim/c-support/templates中的Template保存着个人设置信息
如果你对部分定义的代码不满意,可以修改对应的文件中的相应部分。如你对使用快捷键“\im”产生的mian函数的骨架不满意,可以修改templates\c.idioms.template文件中的“== idioms.main
==”部分。
time_t now;
char timebuf[100] = {0};
now = time(NULL);
strftime ( timebuf, sizeof (timebuf),
"%a, %d %b %Y %H:%M:%S GMT", gmtime (&now) );
printf("Date: %s\r\n", timebuf );
char
bufline[]="name=\"value\"";
char *tmp = strtok(bufline,
"\"");//以“分隔 返回“之前的字符串 name=
tmp = strtok(NULL, "\"");//再以“分隔 返回“之前的字符串 value
printf("%s",tmp);
char *g_http_line_buf;
g_http_line_buf=(char *)calloc(1,128);
strcpy(g_http_line_buf,"GET
/index.html?user=\"zhanshan\" HTTP/1.1^M");
printf("%s\n",g_http_line_buf);
if (strncasecmp(g_http_line_buf,
"GET", 3) && strncasecmp(g_http_line_buf, "POST",
4))
{
printf("include get or post"
);
}
char *method,*path,*protocol,*file,*query;
method = path = g_http_line_buf;
strsep ( &path, " " );
protocol = path;
strsep ( &protocol, " " );
file = &(path[1]);//把/后面的字符串指针给file
query = strchr ( file, '?' );
if(query)
{
*query++ = 0;
}
printf("method:%s\npath:%s\nprotocol:%s\nfile:%s\nquery:%s\n",method,path,protocol,file,query);
free(g_http_line_buf);
enum {
admin=100,
users=103
}
G3_USER_GROUP;
G3_USER_GROUP
= admin;
printf("%d\n",G3_USER_GROUP);
static
int match_one ( const char *pattern, int patternlen, const char *string )
{
const char *p = NULL;
for ( p = pattern; ( p - pattern ) <
patternlen; ++p, ++string )
{
if ( ( '?' == *p ) &&
( *string != '\0' ) )//如果p为? string没有结束则继续
{
continue;
}
if ( '*' == *p )
{
int i, pl;
++p;
if ( '*' == *p)
{
/*两个通配符'*'匹配所有字符 */
++p;
i = strlen
(string);
}
else
{
/*单个通配符'*'匹配除了'/'字符外的所有字符*/
i = strcspn
( string, "/" );
}
pl = patternlen - (
p - pattern );
for ( ; i >= 0;
--i )
{
if (
match_one ( p, pl, &(string[i]) ) )
{
return
(1);
}
}
return (0);
}
if ( *p != *string )
{
return (0);
}
}
if ( '\0' == *string )
{
return (1);
}
return (0);
}
int
match ( const char *pattern, const char *string )
{
const char *or;
for ( ; ; )
{
or = strchr ( pattern, '|'
);//**.html
if ( or == (char *) 0 )
{
return match_one (
pattern, strlen (pattern), string );
}
if ( match_one ( pattern, or
- pattern, string ) )
{
return (1);
}
pattern = or + 1;
}
}
调用
int main
( int argc, char *argv[] )
{
if(match("**.htm|**.jsp","index.hml"))
{
printf("match\n");
}
else
{
printf("not
match\n");
}
exit(0);
}
char
lang_file[30];
sprintf(lang_file,
"/usr/sbin/%s.js", lang_info);可以是一个变量
sprintf(lang_file,
"/usr/sbin/%s.js", "cn");也可以是一个值
char
header[10000];
memset(header,
0, sizeof(header));
snprintf
( header, sizeof (header), "WWW-Authenticate: Basic
realm=\"%s\"", realm );
char
page_language[128];
memset(
page_language, 0, sizeof(page_language) );//初始化页面语言字符串
FILE *fp
= fopen(lang_file, "r");//判断文件是否存在
if (fp
== NULL)
{
fprintf( stderr, "open language file(%s)
error(%d)\n", lang_file, errno );
return ;
}
trans_js_name(fp,
"lang_charset.set", page_language, sizeof(page_language));
fclose(fp);
char *trans_js_name(FILE
*fp, const char *name, char *value, int maxlen)
{
char bufline[256];
char *temp;
if (fp == NULL || name == NULL || value ==
NULL)
{
return NULL;
}
temp = value;
while (fgets(bufline, sizeof(bufline) - 1,
fp) != NULL)//循环读取文件流的每一件
{
if (strstr(bufline, name))//如果包含了相对应的name=”value“
{
char *tmp = strtok(bufline,
"\"");以“分隔
tmp = strtok(NULL,
"\"");再以“分隔
strncpy(value, tmp, maxlen);//取出对应的值
return temp;
}
}
return temp;
}
typedef
FILE * webs_t;
int
websWrite ( webs_t wp, char *fmt, ... )
{
va_list args;
char buf[1024];
int ret;
FILE *fp = wp;
if ( !wp || !fmt )
{
return -1;
}
va_start ( args, fmt );
vsnprintf ( buf, sizeof ( buf ), fmt,
args );
ret = fprintf ( fp, "%s", buf
);
va_end ( args );
fflush ( wp );
return ret;
}
int
main (
int argc, char *argv[] )
{
FILE *wp = fopen("./tmp",
"ab+");
websWrite (wp,
"%s","hello,world!\n");
if (wp == NULL)
{
fprintf( stderr, "open
file error(%d)\n", errno );
return ;
}
fclose(wp);
wp=fopen("./tmp",
"r");
char bufline[256];
while (fgets(bufline, sizeof(bufline) -
1, wp) != NULL)//循环读取文件流的每一件
{
printf("%s\n",bufline);
}
fclose(wp);
exit(0);
}
va_list、va_start、va_arg、va_end的原理与使用
void
test_va(const char *name,...)
{
va_list list;
if (!name)
{
return NULL;
}
va_start ( list, name );
char *arg = NULL;
char buf[128];
vsnprintf ( buf, sizeof ( buf ), name, list
);
printf("%s\n",buf);
/*
while (1)
{
arg = va_arg( list, char *);
if ( strcmp( arg, "") == 0 )
break;
printf("%s\n", arg);
}
while ((arg = va_arg(list, char *)) !=
NULL)
{
printf("arg=%s\n",arg);
}
*/
va_end(list);
}
void
arg_cnt(int cnt, ...)
{
int value="0";
int i="0";
int arg_cnt=cnt;
va_list arg_ptr;
va_start(arg_ptr, cnt);
for(i = 0; i < cnt; i++)
{
value = va_arg(arg_ptr,int);
printf("value%d=%d\n", i+1,
value);
}
}
int main
( int argc, char *argv[] )
{
test_va("%s %s %s",
"test","hello","world");
arg_cnt(4,1,2,3,4);
exit(0);
}
AT&T汇编
lxq@lxq:~/tmp$
as -o hw.o hw.s
lxq@lxq:~/tmp$
ld -o hw hw.o
dd-wrt
http://www.dd-wrt.com/wiki/index.php/Building_From_Source#Building_DD-WRT_From_Source
svn co
svn://svn.dd-wrt.com/DD-WRT .
DGB调试
d 空格加断点num,是去断点的,c是跳到下一个断点
进入子进程调试
set
follow-fork-mode child
参考资料:
http://www.ibm.com/developerworks/cn/linux/l-cn-gdbmp/index.html