C/C++
文章平均质量分 63
lv_xinmy
这个作者很懒,什么都没留下…
展开
-
C++实现简单日志类
一个简单的记录日志至文件或者(标准输出及错误文件),不包括系统日志。直接上代码:LogFile.h#ifndef LOG_FILE_INC#define LOG_FILE_INCclass LogFile{public: LogFile() ; virtual ~LogFile() ; static void open( const char *logFN原创 2013-02-05 13:47:46 · 1227 阅读 · 0 评论 -
VAD实现 (三) --- 算法计算流程与框架
在实现VAD算法之前,先给出在这里VAD算法的实现流程和算法框架。调用关系依次是 detect_wav -> detect_frame->process_vad->energy_detect,energy_detect比较复杂,所以暂时不在这里,这只是表示出基本的计算流程和框架int frame_size = 256 ; int sample_rate = 8000 ;// 采样频原创 2013-06-18 11:12:53 · 7544 阅读 · 7 评论 -
Linux上获取所有网卡信息
#include #include #include #include #include int main(){ struct ifreq ifr; struct ifconf ifc; char buf[2048]; int success = 0; int sock = socket(AF_INET, SOCK_DGRAM, IPPROT原创 2013-06-18 17:53:57 · 2330 阅读 · 0 评论 -
C语言简单的进度条实现
实现一个简单的进度条,就是从0%-100%之间显示,我给一个数字,如:56,进度条就应该显示 56% 。原创 2013-07-15 15:36:15 · 4724 阅读 · 0 评论 -
多个静态库合并
这个方法适合下面的问题合并多个静态库。静态库的多级依赖。静态库级联调用,导致链接错误。。。。。。。第一步:生成静态库文件echo CREATE lib-static.a > ar.mac 回车echo SAVE >> ar.mac 回车echo END >> ar.mac 回车ar -M 第二步:加入.o文件至静态库ar -q lib-static原创 2014-02-20 18:59:23 · 5366 阅读 · 0 评论 -
CMake 执行shell
使用cmake时,可以在cmakelist.txt中如下执行shell一,方法1set(LOG "log.txt")add_custom_command(OUTPUT ${LOG} COMMAND echo "Generating log.txt file..." COMMAND echo "welcome" COMMAND sh -x shell.sh COMME原创 2014-02-20 19:03:34 · 13920 阅读 · 0 评论 -
rpmbuild打包错误记录
一,在rpmbuild给spec脚本指定变量rpmbuild --define="version ${version}" --define="project ${PROJECTNAME}" -ba ./rpm/project.spec这样,在spec脚本中可以用%version获取到version的变量值,如下:Name: %projectVersion: %version原创 2014-02-24 18:12:35 · 5584 阅读 · 0 评论 -
关于socket通信时SIGPIPE的问题
一,SIGPIPE信号的产生在Linux平台下,写socket的程序时,难免总是会碰到SIGPIPE 的问题,此时如果不作处理,那你可能需要一个监控,每1分钟检查进程是否存在,不存在的话,就重新启动,因为进程对SIGPIPE的默认响应是退出。SIGPIPE 的产生是由于往一个断开的连接上写数据,该连接已经被复位,这就会引起操作系统抛出一个SIGPIPE信号给相应的进程,而相应的进程在收到操原创 2014-02-28 15:36:21 · 2280 阅读 · 0 评论 -
C语言清除输入缓冲区
在使用scanf输入时,如果输入不合法,此时可以检查其返回值为0,但下次再调用时,上次不合法的输入,还在输入缓冲区中,此时就会接着不合法,如下:#include int main(int argc,char** argv){ int id ; int ret = scanf("%d",&id); while(ret == 0){原创 2014-03-28 13:22:21 · 2349 阅读 · 0 评论 -
C语言字符串函数-strpbrk函数
一,strpbrk函数函数原型:extern char * strpbrk(char *s1,char *s2);头文件:功能:在字符串s1中寻找字符串s2中任何一个字符相匹配的第一个字符的位置,但s2中不能包含'\0'。这个函数可以认为是strchr的一个扩展版本。其它:这个函数名字不如strcpy、strcmp那么直接,它的意思是【string pointer break】原创 2014-03-22 13:30:54 · 1245 阅读 · 0 评论 -
accept的一个小陷阱
先看下面的代码:监听127.0.0.1 : 5563 ,如果有连接,就输出这个客户端的IP、端口和连接描述符。#include #include int main(int argc,char** argv){ int _socket = 0 ; struct sockaddr_in addr_server,addr_client;原创 2013-05-30 17:52:42 · 2663 阅读 · 0 评论 -
C++使用hash_map时警告
在C++中使用hash_map时,警告如下:。。。。。。。。。。。。。/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/backward/backward_warning.h:28:2: 警告:#warning This file includes at least one deprecated or a原创 2013-04-09 10:47:39 · 3346 阅读 · 0 评论 -
C语言实现的常见日志-abort\log\info\error
有这些时候:我们一个小的项目或者是一个独立的由几个文件组成的可执行文件,希望有一些简单的输出,包括日志以及异常退出。但是我们又不希望因为这些需求安装一些类似于glog、log3cpp等日志开源的包,因为我们不需要一些类似于线程安全等之类的调用、就是希望简单一点,越简单越好。。。。是的,就是这样。头文件log.h 如下#ifndef _LOG_H_#define _LOG_H_原创 2013-04-08 10:39:46 · 1968 阅读 · 0 评论 -
A20地址线
void go_to_protected_mode(void){ /* Hook before leaving real mode, also disables interrupts */ realmode_switch_hook(); /* Move the kernel/setup to their final resting places */ move_kernel_aroun原创 2013-02-19 13:50:16 · 1209 阅读 · 0 评论 -
探索extern "C"
有一种说法是C++是另一种C语言,虽然在C++创建之初的初衷也是期望一个更好的C,但是C++中全局变量和函数所采用的编译和连接方式却与C语言不完全相同。这就会引起C++和C语言在处理全局变量和函数时所采用的不同方式,并且当这两种方式需要C++与C兼容时,就会引入一些平衡两种处理方式的另一种处理方法。 下面的代码段,在C程序里,应该经常可见#ifdef __cplusplus原创 2013-02-19 13:46:53 · 705 阅读 · 0 评论 -
C语言实现16位和32位按字节反转
32位反转如下:void Rev32InByte( void *val ){ unsigned int v = *((unsigned int *)val) ; v = ((v & 0x000000FF) << 24) | ((v & 0x0000FF00) << 8) | ((v & 0x00FF0000) >> 8) |原创 2013-02-20 10:49:38 · 3008 阅读 · 0 评论 -
C语言实现简单内存池
在用C语言开发时,特别是在服务器端,内存的使用会成为系统性能的一个瓶颈,如频繁的分配和释放内存,会不断的增加系统的内存碎片,影响内核之后分配内存的效率,这个时候一个比较可行的做法是采用内存池,先分配好比较多的内存,然后在这个已经分配的内存里使用内存,这样就不需要内核过多的参与内存分配和释放的过程。内存池根据应用不同有多种实现的策略,如有些分配很大的内存,然后将内存分配成大小相等的块,并将每个块原创 2013-02-22 17:58:32 · 4280 阅读 · 0 评论 -
C++实现语音识别词典内存存储模型
对于给定的词典,如下一 ii i1一一 ii i1 ii i1一一一 ii i1 ii i1 ii i1一一一一 ii i4 ii i1 ii i4 ii i1一一一七 ii i1 ii i1 ii i1 q i1一一一三 ii i1 ii i1 ii i1 s an1一一一九 ii i1 ii i1 ii i1 j iu3一一一二 ii i1 ii i1 ii i1 ee原创 2013-02-26 16:05:44 · 1767 阅读 · 0 评论 -
N-Gram的数据结构
ARPA的n-gram语法如下:\data\ngram 1=64000ngram 2=522530ngram 3=173445\1-grams:-5.24036 'cause -0.2084827-4.675221 'em -0.221857-4.989297 'n -0.05809768-5.365303原创 2013-02-26 17:19:04 · 2421 阅读 · 0 评论 -
GDB调试-数组查看技巧
GDB是在Linux上开发的必备调试工具,也是一个强大的调试工具,在查看数组的值时,可以查看数组中的多个值。如:我定义的一个数组变量如下char **monophoneStrs如果用GDB查看,如下:(gdb) p *monoLookup->monophoneStrs$8 = 0x627ec0 "aa"(gdb) 这样就只显示数组的第一个值,如果我需要输出多个值原创 2013-02-28 14:17:21 · 13388 阅读 · 0 评论 -
gdb断点调试的两个技巧-condition和ignore
今天调试一个程序时,程序有一个循环调用,但我想观察循环中间的,此时condition就很有用了,可以根据条件来停止当前的断点。一,condition这个功能很强大,可以在我们设置的条件成立时,自动停止当前的程序,先使用break(或者watch也可以)设置断点,然后用condition来修改这个断点的停止(就是断)的条件。使用方法很简单,如下:condition 修改当前的断点原创 2013-03-13 10:59:14 · 3352 阅读 · 0 评论 -
C语言可变参数的简单理解-计算最大值
可变参数是C里面的一个使用技巧,用宏来实现的,其实主要是根据一个可变参数指针,然后不断的往后移指针。但是理解是怎么用的,还是比较容易的。#include //使用可变参数需要的头文件#include int max(int count, ...){ va_list ap;//1)定义一个可变参数,这个地方其实是一个指针,用于访问可变参数中的参数列表 v原创 2013-04-08 11:34:47 · 1140 阅读 · 0 评论 -
从WAVE头文件中获取压缩方式
在解析WAV文件时,会从头文件中读取TAG值,表示当前文件的压缩格式,如该值为1,表示没有压缩,其它表示不同的压缩方式。如其中为6时,表示压缩方式是alaw列表如下:TAG值音频描述00x0000Unknown10x0001Microsoft PCM2原创 2014-04-25 18:12:54 · 1888 阅读 · 3 评论