现在位置: 首页 > 编程语言 > 文章
2018年10月04日 编程语言 ⁄ 共 687字 评论关闭
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...
阅读全文
2018年10月03日 编程语言 ⁄ 共 1729字 评论关闭
一、函数对象定义与实例 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的...
阅读全文
2018年10月03日 编程语言 ⁄ 共 1570字 评论关闭
一、函数对象、函数指针的定义和使用       二者定义方式不同,使用方式相同。 #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<<...
阅读全文
2018年10月03日 编程语言 ⁄ 共 2266字 评论关闭
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...
阅读全文
2018年10月03日 编程语言 ⁄ 共 2505字 评论关闭
生成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...
阅读全文
2018年10月02日 编程语言 ⁄ 共 2667字 评论关闭
一、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...
阅读全文
2018年10月02日 编程语言 ⁄ 共 1872字 评论关闭
一般察看函数运行时堆栈的方法是使用GDB(bt命令)之类的外部调试器,但是,有些时候为了分析程序的BUG,(主要针对长时间运行程序的分析),在程序出错时打印出函数的调用堆栈是非常有用的。 在glibc头文件"execinfo.h"中声明了三个函数用于获取当前线程的函数调用堆栈。 int backtrace(void **buffer,int size)  该函数用于获取当前线程的调用堆栈,获取的信息将会被存放在buffer中,它是一个指针列表。参数 size 用来指定buffer...
阅读全文
2018年10月02日 编程语言 ⁄ 共 5476字 评论关闭
作为一个c++菜鸟,研究半天这个代码的实现原理,发现好多语法不太熟悉,因此加了一大堆注释,仅供参考。该段代码主要通过继承workthread类来实现自己的线程代码,通过thread_pool类来管理线程池,线程池不能够实现动态改变线程数目,存在一定局限性。目前可能还有缺陷,毕竟c++来封装这个东西,资源释放什么的必须想清楚,比如vector存储了基类指针实现多态,那么如何释放对象仍需要考虑,后续我可能会更进一步修改完善该代码...
阅读全文