Linux时间戳、日期转换函数:
#include <stdio.h>
#include <iostream>
#include <string>
#include <time.h>
using namespace std;
time_t date_to_timestamp(char *date, char *pfmt)
{
struct tm t;
strptime(date, pfmt, &t);
time_t tt = mktime(&t);
return tt;
}
string timestamp_to_date(time_t tt)
{
struct tm *t = localtime(&t...
阅读全文
一、函数对象定义与实例
1.1 定义
函数对象:一个重载了运算符()的个对象,可以像一个函数一样使用。
1.2 实例
#include <iostream>
using namespace std;
class Add
{
public:
int operator() (int val1, int val2)
{
return val1 + val2;
}
};
int main(int argc, char *argv[])
{
Add add;cout<<add(3, 5)<<endl;
return 1;
};
二、函数对象在STL中的应用
2.1 统计vector中大于0的...
阅读全文
一、函数对象、函数指针的定义和使用
二者定义方式不同,使用方式相同。
#include <iostream>
using namespace std;
//function object
class obj_Add
{
public:
int operator() (int val1, int val2)
{
return val1 + val2;
}
};
//function pointer
int fun_Add(int val1, int val2)
{
return val1 + val2;
}
int main(int argc, char *argv[])
{
//function object
obj_Add obj_add;
cout<<...
阅读全文
Windows下
一、代码
#include <iostream>
#include <WinSock2.h>
using namespace std;
#pragma comment(lib,"Ws2_32.lib")
void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD(2, 2);
err = WSAStartup(wVersionRequested, &wsaData);
if (err != 0)
{
printf("WSAStartup failed with error: %d\n", err);
return;
}
if (LOBYTE(wsaData.w...
阅读全文
生成testtcp.ko模块,添加到内核。
添加该模块后,每个由该机器发出的数据包,如果是TCP协议,且源端口为81,将其改为RST包发出。
一、代码
1.1 文件:testtcp_main.c
#include <linux/netfilter.h>
#include <linux/netfilter_ipv4.h>
#include <linux/module.h>
#include <linux/moduleparam.h>
#include <linux/kernel.h>
#include <linux/inetdevice.h>
#include <linux/string.h...
阅读全文
//Dll中的代码
#include <windows.h>
#pragma data_seg("MyData")
HINSTANCE g_hInst = NULL;
#pragma data_seg()
BOOL DllMain(HINSTANCE hDllInst,DWORD dwReason,LPVOID lpReserved)
{
if(DLL_PROCESS_ATTACH == dwReason)
{
g_hInst = hDllInst;
}
return TRUE;
}
extern "C" _declspec(dllexport) int Add(int a,int b)
{
return a+b;
}
//主程序加载Dll的代码
#include <iostream>
#includ...
阅读全文
一、代码
模块1导出了函数void output(void),模块2调用了模块1中的函数。(先加载模块1,再加载模块2)
模块1:
#include <linux/module.h>
#include <linux/kernel.h>
//
static int int_var = 0;
module_param(int_var, int, 0644);
MODULE_PARM_DESC(int_var, "A integer variable");
static char* str_var = "default";
module_param_named(str_var_alias, str_var, charp, 0644);
MODULE...
阅读全文
一、protocol
//protocol
//-----include/linux/in.h
IPPROTO_UDP
INADDR_ANY
struct sockaddr_in
//-----include/linux/ip.h
struct iphdr
ip_hdr()
//-----include/linux/udp.h
struct udphdr
udp_hdr()
//-----include/linux/tcp.h
struct tcphdr
tcp_hdr()
二、sk_buff
//sk_buff
//-----include/linux/skbuff.h
struct sk_buff
三、memory
//memory
//-----include/li...
阅读全文
一般察看函数运行时堆栈的方法是使用GDB(bt命令)之类的外部调试器,但是,有些时候为了分析程序的BUG,(主要针对长时间运行程序的分析),在程序出错时打印出函数的调用堆栈是非常有用的。
在glibc头文件"execinfo.h"中声明了三个函数用于获取当前线程的函数调用堆栈。
int backtrace(void **buffer,int size)
该函数用于获取当前线程的调用堆栈,获取的信息将会被存放在buffer中,它是一个指针列表。参数 size 用来指定buffer...
阅读全文
作为一个c++菜鸟,研究半天这个代码的实现原理,发现好多语法不太熟悉,因此加了一大堆注释,仅供参考。该段代码主要通过继承workthread类来实现自己的线程代码,通过thread_pool类来管理线程池,线程池不能够实现动态改变线程数目,存在一定局限性。目前可能还有缺陷,毕竟c++来封装这个东西,资源释放什么的必须想清楚,比如vector存储了基类指针实现多态,那么如何释放对象仍需要考虑,后续我可能会更进一步修改完善该代码...
阅读全文