C 语言最佳实践 2018 程序啪啪啪
沙箱运行模式
解决场景
- 不影响原运行环境
- 获取运行结果状态
具体实现细节
- 父进程准备好前文的状态
- 通过
fork
调用子进程 - 子进程处理
- 父进程通过
waitpid
进行等待, 并根据返回结果处理后续工作
上下文维持
解决场景
- 防止程序重入
- Context 维持最简洁
具体实现细节
- 在实现时, 需要考虑根据持久化数据的状态.
- 步骤与任务间可以串行运行, 各任务间通过事务的概念进行统一管理.
- 在这种情况下, 事务实现时需要保证可回滚.
网络通信处理
网络传输
相关支持库
- libcurl
传输安全
相关支持库
- openssl
协议解析
其中的标准解决方案是: 针对协议规范制定标准语言文法描述, 通过编译原理的前端处理技术完成相关工作. 目前实现上述方案的有: Ragel, lex, yacc等标准生成引擎.
手工处理
类似于Ruby文本处理方法, 目前主要讨论基于行解析的一些实践. 主要使用如下API:
- sscanf
- sgets
整体结构:
int count=0;
int tcount=0;
char* multiline="Download: a\nDownload: b\nDownload: c\nRun: c\nRun: a\n";
char s[1024];
int tot = 0;
int b;
do{
b=0;
tcount +=(count=sscanf(multiline+tot,"Download: %s\n%n",s,&b));
if(count>0){
//Process Download
}
tot += b;
tcount +=(count=sscanf(multiline+tot,"Run: %s\n%n",s,&b));
if(count>0){
//Process Run
}
tot += b;
}while(tcount>0);
Log
Android NDK logger
Other
利用%n去处理sscanf 的移动
//http://stackoverflow.com/questions/4217583/sscanf-with-multiline-string
int byte_read=0;
int total_read=0;
while(EOF!=sscanf((const char*)(res+total_read), "%s %d %n", name, &filesize, &byte_read)){
total_read+=byte_read;
LOGI("Name=%s, Size=%d",buff,filesize);
}
文章目录 |
创建@
2014-01-28
最后修改@
2014-02-26