随笔分类 -  UNIX &Linux

摘要:项目中实现了checksum服务,看了下实现,用的是openssl库中的hash算法。很简单的一个实现如下: 1 std::string ChecksumImplement::SHA1(const std::string & str) 2 { 3 unsigned char sha1_digest[SHA1_DIGEST_LENGTH] = {0}; 4 ::SHA1(reinterpret_cast<const unsigned char *> (str.c_str()), str.length(), sha1_... 阅读全文
posted @ 2012-08-02 18:25 阅读(4075) 评论(0) 推荐(0)
摘要:netbeans中添加依赖库时,有几种类型,一直不太明白他们的区别:我们用pkgonfig库添加了kyotocabinet,最终在makefile中生成了编译选项:`pkg-config --libs kyotocabinet`。下面来研究一下:(1)整个命令用了``,应该表示将``中命令执行的结果传给makefile,在shell中这样的,这里应该也差不多;(2)pkg-config是shell命令,具体介绍如下:1.什么是configure configure会根据传入的配置项目检查程序编译时所依赖的环境以及对程序编译安装进行配置,最终生成编译所需的Makefile文件供程序Ma... 阅读全文
posted @ 2012-08-02 16:51 阅读(1923) 评论(0) 推荐(0)
摘要:录制程序要继续添加新功能:模拟电视,板卡发送出来的是rtsp流(h264视频+alaw(pcma)音频)。由于之前做过将rtp流(h264视频+aac音频)录制合成mp4文件(参见http://www.cnblogs.com/chutianyao/archive/2012/04/13/2446140.html),很自然的就决定将其合成为mp4文件。但是有些不同:(1)需要解析RTSP协议。研究了一下RFC2326,发现也不是很复杂。 rtsp分控制流和数据流:控制流就是客户端向服务端发送控制命令,包括查看节目信息、播放、停止节目等,一般是通过TCP协议通信的;数据流就是服务端将音视频数据发送. 阅读全文
posted @ 2012-07-28 12:53 阅读(11422) 评论(1) 推荐(1)
摘要:场景:有类crawler,以及它的对象 _pService。crawler类中声明了两个boost thread成员变量:1 boost::thread m_workThrd;2 boost::thread m_parseThrd;由外部线程在需要的时候调用_pService->fun()来启动这两个线程,并给成员变量workThrd、parseThrd赋值。_pService对象也可能没有调用_pService->fun(),因此workThrd、parseThrd可能就是初始值。在程序退出时,workThrd、parseThrd如果已经启动并在运行了,就需要停止这两个线程;.. 阅读全文
posted @ 2012-07-24 11:28 阅读(1382) 评论(0) 推荐(0)
摘要:不多解释,用到了log4cpp和boost库。_GLIBCXX_BEGIN_NAMESPACE宏是c++标准库里的,用于声明namespace。我是从stl源码里拿过来用的。 1 /* 2 * File: log.h 3 * Author: raozf 4 * 5 * Created on 2012年7月19日, 上午11:33 6 */ 7 8 #ifndef RZF_LOG_H 9 #define RZF_LOG_H10 11 #include <boost/date_time/posix_time/posix_time.hpp>12 #include <log4cpp/ 阅读全文
posted @ 2012-07-23 17:05 阅读(385) 评论(0) 推荐(0)
摘要:最近的项目中需要将几个dump文件(文本格式、1~2G)的记录导入到mysql数据库中,由于数据量比较大(几百万、上千万条记录),有插入记录,也有更新记录的,导致插入\更新速度比较慢。一开始,将单条sql语句交给mysql执行,测试下来,最快一次也要一个半小时。于是想办法改进之。(1)针对插入记录,使用sql语句一次插入多条记录。实例:INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);具体参见sql语法:http://dev.mysql.com/doc/refman/5.0/en/insert.html在程序中,使用循环拼接s 阅读全文
posted @ 2012-07-18 16:05 阅读(7463) 评论(0) 推荐(0)
摘要:公司来了新服务器(64位系统),将项目从原来的服务器(32位)上迁移过去后,编译出错:g++ -shared -o dist/Debug/GNU-Linux-x86/libGeoFlock.so -fPIC build/Debug/GNU-Linux-x86/GeoFlock.o build/Debug/GNU-Linux-x86/library.o build/Debug/GNU-Linux-x86/GeoCrawler.o http://www.cnblogs.com/framework/jasgreen/dist/Debug/GNU-Linux-x86/libjasgreen.a... 阅读全文
posted @ 2012-07-09 16:21 阅读(5046) 评论(0) 推荐(0)
摘要:和上一次的现象差不多:数据量小时一切正常,稍微大一点monitord就会没响应。具体跟踪之,发现如下现象:(1)MonitorServer给monitord发送请求,一切都正常;但是没有收到monitord返回的响应;(2)monitord收到并解析请求,一切正常;(3)monitord执行请求,一切正常;(4)最后一步:monitord更新配置文件,超时。崩溃。。。写文件居然会超时?这得多大的数据量阿,俺们的数据量也没达到这么恐怖的底部呀?废话少说,扒开代码一看,彻底拜服: 1 static int set_threshold_cfg() 2 { 3 ... 4 5 ... 阅读全文
posted @ 2012-05-11 15:39 阅读(279) 评论(0) 推荐(0)
摘要:前几天,MonitorServer有个功能在客户现场被报告无法工作,于是立即跟踪之。该功能要完成的工作是:从上层(BS系统)接收配置参数,按照系统运行情况,将设置参数转发给指定的下层系统(有些发送到嵌入式设备上,有些发送到其他程序)。之前在本地测试,一切都Ok。为什么在客户现场就不行呢?于是做了两项测试:(1)使用本地数据重新测试,结果正常。(2)将涉及到的客户现场数据导回来,测试之,果然无法正常工作。跟踪发现,问题出在MonitorServer将参数转发给下层(另外一个程序monitord)时,没有收到monitord返回的响应,导致转发失败。于是去查看monitord程序,发现它竟然崩溃了 阅读全文
posted @ 2012-04-28 17:38 阅读(434) 评论(0) 推荐(0)
摘要:刚装好Fedora 12,以root登录图形界面,报错:“鉴定故障”。经查:默认不允许以root登录图形界面。解决办法:(1)以普通用户登录。(2)#su切换到root。(3)#vi /etc/pam.d/gdm在如下行前加“#”,将其注释掉:auth required pam_succeed_if.souser != root quiet(4) #vi /etc/pam.d/gdm-passwaord在如下行前加“#”,将其注释掉:auth required pam_succeed_if.souser != root quiet经验证:使用sudo vi /etc/pam.d/gdm无法编辑 阅读全文
posted @ 2012-04-17 10:58 阅读(1787) 评论(0) 推荐(2)
摘要:录制程序要添加新功能:录制CMMB电视节目,我们的板卡发送出来的是RTP流(H264视频和AAC音频),录制程序要做的工作是: (1)接收并解析RTP包,分离出H264和AAC数据流; (2)将H264视频和AAC音频以某种格式封装,最后存成文件,供用户查看。 第一步已经有部分代码可供参考,因此很快 阅读全文
posted @ 2012-04-13 17:30 阅读(34825) 评论(34) 推荐(5)
摘要:主要是接收并处理snmp客户端发送控制命令:启动/停止单个节目的录制。也就是实现snmp的SET命令。1.还是从MIB开始。由于只是一个简单的起停命令,前面定义的recordStatusTable中的Status字段完全满足要求,我们只需要给它设置一个不同的值就可以了。之前在文件"/usr/local/share/snmp/mibs/FIGURE-IT-MIB.txt"中给它定义的访问属性是:“read-only”,将它改成“read-write”就OK了。2.生成代码,与之前完全相同,就不多说了。3.由于包含有“read-write”属性的IOD,生成的代码就多了些处理动 阅读全文
posted @ 2012-03-30 14:43 阅读(10781) 评论(1) 推荐(1)
摘要:前面提到了程序要主动上报异常状况,snmp提供了notification机制来实现此功能。大致步骤如下:1.还是从MIB文件开始:在文件"/usr/local/share/snmp/mibs/FIGURE-IT-MIB.txt"增加如下内容: 1 recordNotification NOTIFIC... 阅读全文
posted @ 2012-03-29 17:29 阅读(4635) 评论(1) 推荐(0)
摘要:录制程序要提供远程控制功能,大概需求为: (1)可以查询程序当前的运行状态:录制了多少路节目,每路节目的状态,数据码率 等等; (2)可以远程控制节目的起停,也就是发一个命令,就可以停掉某一路节目; (3)异常情况,主动上报。 上头决定使用snmp来实现。这几天研究了一下,做点笔记。 闲话休叙,开工 阅读全文
posted @ 2012-03-28 17:04 阅读(10802) 评论(2) 推荐(2)
摘要:在cu上看到一种测试大小端的方法,且记下来:内核中抠出来的一个测试大小端的程序,非常好,而且简练。内核的技巧真是无处不再阿. /* *author:qqbsd *email:qqbsd.zhou@gmail.com */ #include stdio.h> static union { char c[4]; unsigned long l; } endian_test = { {'l','?','?','b'} }; #define ENDIANNESS ((char)endian_test.l) int main(void 阅读全文
posted @ 2012-03-12 09:40 阅读(654) 评论(0) 推荐(0)
摘要:刚才查看select调用的资料时,发现网上这么一种用法,且记下来: 1 //Socket服务器端,在一个死循环中的代码: 2 nsock = accept(sock, (struct sockaddr *)&sin, &len); 3 iFlag = fcntl(nsock, F_GETFL); 4 iFlag |= O_NONBLOCK; 5 alarm(2); 6 fcntl(nsock, F_SETFL, iFlag); 7 alarm(0); 8 timeout.tv_sec = 1; 9 timeout.tv_usec = 0;10 select(NULL, NULL 阅读全文
posted @ 2012-03-09 23:38 阅读(1413) 评论(0) 推荐(0)
摘要:测试时,需要自动删除录制的文件,于是写了个脚本,自动删除过期的文件。如下: 1 #!/bin/bash 2 #待删除目录,根路径 3 root_path="/figure/Record" 4 5 #保存时间:分钟 6 save_time=1 7 8 for source_type in $(ls ${root_path}) 9 do10 if test -d ${root_path}/${source_type};then #录制对象目录11 cd ${root_path}/${source_type}12 13 for channel... 阅读全文
posted @ 2012-03-09 17:44 阅读(554) 评论(0) 推荐(0)
摘要:昨天在客户现场部署一套录制时,遇到一个小问题,且记录下来。系统启动后,日志会告警:statfs error. strPath:/figure/datafile/recordfile5/FullRecord/StreamTS/1-1-东方卫视, Value too large for defined data type RepeatCount=34经查问题如下:(1)我们的系统开启了一个线程,不断的扫描系统磁盘的使用情况。使用的是系统调用 statfs();struct statfs { long f_type; /* type of file system (see below) */ lon 阅读全文
posted @ 2012-02-28 09:54 阅读(2728) 评论(0) 推荐(0)
摘要:测试NAS的性能,要模拟多录节目同时写数据的场景,来测试该NAS在真实环境中的数据吞吐性能。写了个简单的脚本,同时运行多个dd命令,模拟了多路节目,最近将结果输出到文件中:1 #!/bin/bash2 3 for i in {1..5}4 do5 (dd if=/dev/zero of=/aa bs=1M count=1000) 2>>result.txt &6 done 阅读全文
posted @ 2012-02-22 11:18 阅读(316) 评论(0) 推荐(0)
摘要:注意:表述有误! 请以mannul手册为准!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------最近接触到信号量,看手册里有sem_post族函数和semop族函数,不太清楚有什么不同,于是查了一下。请看下图:sem_post适用于linux线程间同步;semop适用于linux进程间同步。这篇文章不 阅读全文
posted @ 2012-02-09 17:46 阅读(1026) 评论(0) 推荐(0)