备用代码,For Linux

本文分享了几个实用的编程技巧及示例代码,包括使用Boost库创建带参数的线程、利用libpcap捕获网络接口数据包及获取当前日期时间的方法。
   这里写的一些代码,是最近工作中的总结.  不成片段,不能单独编译,但是在以后编程中可能会用到, 所以记录于此.
  
1.使用boost库创建线程.
   以下创建两个线程,boost库允许给指定线程函数传入参数,可以用boost::bind()函数来指定线程函数的参数.
  
None.gifvoid Fun1();
None.gif
void Fun2(string str_val);
None.gif
None.gif
string str_1;
None.gif
None.gifboost::thread thrd1(
&Fun1);
None.gifboost::thread thrd2(boost::bind(
&Fun2,str_1));
None.gifthrd1.join();
None.gifthrd2.join();

2.抓取某个网络接口的数据包,使用libpcap.
None.gifbuf_u_int32 mask,net;
None.gif
struct pcap_pkthdr header;
None.gif
const char* packet;
None.gifpcap_t
* handle=NULL;
None.gif
struct bpf_program fp;
None.gif
None.gif
void got_packet(u_char* args,const pcap_pkthdr* header,
None.gif
const u_char* packet)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif{
InBlock.gif
//dot.gif..
ExpandedBlockEnd.gif
}

None.gif
None.gif
if(pcap_lookupnet("eth0",&net,&mask,errbuf)!=-1)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif{
InBlock.gif   handle 
= pcap_open_live("eth0",BUFSIZ,1,1000,errbuf);
InBlock.gif   
if(handle)
ExpandedSubBlockStart.gifContractedSubBlock.gif   
dot.gif{
InBlock.gif      
if(pcap_compile(handle,&fp,"ip",0,net)!=-1)
InBlock.gif         
if(pcap_setfilter(handle,&fp)!=-1)
ExpandedSubBlockStart.gifContractedSubBlock.gif         
dot.gif{
InBlock.gif            pcap_loop(handle,
0,got_packet,NULL);
ExpandedSubBlockEnd.gif         }

ExpandedSubBlockEnd.gif   }

ExpandedBlockEnd.gif}


3.获得当前日期和时间值
None.gifsize_t GetLocalTime(char* time_format)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif{
InBlock.gif   time_t time_ts;
InBlock.gif   
struct tm* local_time_tm;
InBlock.gif   sizt_t time_size;
InBlock.gif   
InBlock.gif   
if((time_ts = time(&time_ts))!=-1)
ExpandedSubBlockStart.gifContractedSubBlock.gif   
dot.gif{
InBlock.gif       local_time_tm 
= localtime(&time_ts);
InBlock.gif       
if((time_size=strftime(time_format,MAX_TIME_LEN,"%F %X %z",local_time_tm))!=0)
InBlock.gif         
return time_size;
ExpandedSubBlockEnd.gif   }

InBlock.gif   
return 0;
ExpandedBlockEnd.gif}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值