C/C++小程序
AAA20090987
一个喜欢编程,喜欢C 的人
展开
-
linux:简单小巧的贪吃蛇
这个贪吃蛇是我初学LINUX时写的,使用了curse库,现在发上来和大家共享一下吧。吹一下牛:看来我当前C语言学得还真不错啊,哈哈。废话说完了,上代码://mysnake1.0.c//编译命令:cc mysnake1.0.c -lcurses -o mysnake1.0//用方向键控制蛇的方向#include #include #include #include原创 2012-02-01 22:59:19 · 1876 阅读 · 0 评论 -
nginx队列模块的分析和使用
nginx队列模块的设计挺精妙的,也算是用一个C语言实现泛型编译的典型例子了,我将其独立出来,写上注释和测试例子,方便以后查看。原创 2013-12-16 15:14:01 · 2230 阅读 · 0 评论 -
用libevent实现一个小小的HTTP SERVER
如题,先上代码://http_server.c#include #include #include #include #include #define PORT 8080#define SERVER_MARK "mytest http server 0.1"void http_handle(struct evhttp_request *req, void *arg);i原创 2013-12-27 11:34:24 · 3049 阅读 · 0 评论 -
LINUX C:创建与监控多个子进程
先鄙视一下自己,这个简单的功能也搞了一个上午,看来我的基础不扎实啊,写个DEMO记录一下先。这个程序很简单,创建多个子进程,并开启(父子进程的)事件循环,当一个子进程意外退出时(如被KILL掉),父进程会重新启动一个子进程上代码:#include #include #include #include #include //子进程个数#define SUB_PRO_COUN原创 2014-03-14 13:34:50 · 4609 阅读 · 2 评论 -
拥有线程安全和阻塞功能的vector类SemVector(LINUX平台)
这是我自己写的一个拥有线程安全和阻塞功能的vector类SemVector(LINUX平台),欢迎大家使用//semvector.h#ifndef SEMVECTOR_H_#define SEMVECTOR_H_#include #include #include #include templateclass SemVector{private: T *m_Arr原创 2013-03-06 16:22:53 · 1816 阅读 · 0 评论 -
mysql_control:我自己封装的微型MYSQL操作库
简介:MYSQL的原生C语言API用起来有点麻烦(特别是在要获取查询结果的时候),所以我对其做了一个简单的封装,让它更易于使用。头文件:mysql_control.h#ifndef MYSQL_CONTROL#define MYSQL_CONTROL#include #include #include #include #include #include u原创 2012-11-15 22:52:09 · 1474 阅读 · 1 评论 -
C语言操作MYSQL小例子
初学使用用C语言操作MYSQL,写了个小例子,帖上来献丢人一下,呵呵。 程序很简单,先连接数据库,然后向class1表中插入一条数据,最后获取并输出整个class1表的内容。上代码://test.c//gcc test.c -o test -lmysqlclient#include #include #include //发生错误时,输出错误信息,关闭连原创 2012-11-13 22:35:52 · 6857 阅读 · 1 评论 -
将格式化字符串赋给stl::string
代码很简单,就不解释了,直接上代码:#include #include #include using namespace std;//功能:将格式化字符串赋给stl::string//参数:和printf的参数一样//返回值:返回格式化后的string类string StringFormat(const char *format, ...){ string result;原创 2014-07-25 15:57:28 · 3213 阅读 · 0 评论 -
C++的一种业务分发方案(另类的工厂模式)
在C++中,传统的业务分发,总要写一大串的switch-case,而且每次增加新业务时,都要在原有的switch-case里加一个分支,这就违反了设计模式中的开放封闭原则,以下这种方案,就完全去除了switch-case,每当要添加业务模块时,只要写一个TEST_MODULE(index, name)就可以了。思路很简单,直接上代码:#include #include #inclu原创 2014-07-11 13:03:17 · 2186 阅读 · 0 评论 -
代码格式调整(去掉行号),C++实现
有时候在网上看到一段优秀的代码,心动之余立即用Ctrl+C,Ctrl+V把它拷下来运行一下先,结果却发现该网站不厚道,连每行之前的行号也一同复制下来了,手动删除这些行号实在太麻烦,只好写一个小程序,来删除这些行号了。上代码://先创建in.txt, out.txt这两个文件//然后把要调整的代码放入in.txt中,运行这个程序,//那么,out.txt中的程序就是我们想要的原创 2012-04-05 21:17:55 · 3793 阅读 · 1 评论 -
用openssl进行rsa的加密与解密(linux,C++版)
初学openssl库,写了一例子,记录一下。原创 2014-02-17 11:34:27 · 15071 阅读 · 0 评论 -
C语言:获取某个mysql数据库中所有的表及其表中所有的字段名
程序简介:有时候我们想知道一个数据库中到底有哪些表,表中都有些什么字段。我写了一个小程序来实现这个功能。思路:1:连接数据库(废话)2:获取数据库中所有的表,并将它们缓存下来。3:对于每个表,就执行SQL命令select * from XXX,并将它们的表头输出(如果大家能想到更好的方法,望告知)。原创 2013-01-18 09:57:55 · 3671 阅读 · 2 评论 -
计算代码段的运行时间
计算代码段的运行时间,这段代码用得太多了,决定将其封装成两个宏,方便以后使用。代码很简单,就不解释了。#include #include //计时器开始,//使用时,要将要计时的代码段放入TIMER_START和TIMER_STOP之间,详情请看测试例子//加入do{ }while(0)是为了尽量减少命令冲突#define TIMER_START() \ do \原创 2014-11-11 15:47:52 · 1354 阅读 · 0 评论 -
C++:简单的二维数组模板类
这是我自己封闭的简单的二维数组模板类。欢迎大家试用我用它来代替二维数组或二维vector(二维数组容易出错,二维vector效率太低)原创 2013-11-19 18:09:04 · 4966 阅读 · 0 评论 -
linux C:将域名转化为IP地址
如题,这个功能挺常用的,记录一下方便以后使用原创 2013-11-18 15:54:06 · 3930 阅读 · 2 评论 -
Shell:监控脚本
简介:对于一些要长期运行的程序(如服务器程序),写一个监控程序让在意外退出时自动重启是很有必要的。这个功能,可以通过一个简单的SHELL脚本来实现。#!/bin/shwhile [ 1 ]; do#程序的名字 name="aaa" DTTERM=`pgrep $name`#检查进程实例是否已经存在 if [ ! -n "$DTTERM" ]原创 2012-10-29 21:59:44 · 1332 阅读 · 1 评论 -
LINUX C语言:开启一个专门用来接收信号的子线程。
以下这个小程序实现这个功能。上代码:#include #include #include #include #include #include //程序发生了严重的错误,输出void error_quit(const char *str){ fprintf(stderr, "%s\n", str); exit(1);}//专门用于接收信号的线程函数stat原创 2012-12-28 17:06:06 · 2287 阅读 · 1 评论 -
LINUX:用C语言来模拟密码输入
以前在LINUX环境下,想输入密码(关闭回显)时都是用getpass函数,今天无意中看到手册上说:This function is obsolete. Do not use it. 那我就自己实现一个类似的功能吧(功能相同,原理不同)程序的思路很简单:关闭回显,读取输入,恢复设置。上代码:#include #include #include #include原创 2012-12-29 15:13:46 · 1807 阅读 · 1 评论 -
ping命令的C语言实现(linux, IPv4,简单版)
这个程序主要运用了ICMPv4协议(回显请求)来测试本机到某服务器的网络是否连通,因为其中用到了原始套接字,所以运行该程序需要管理员权限。PS:本程序只支持一种输入方式:./myping ,不支持其他参数。思路:1:根据hostname参数创建原始套接字。2:每隔1秒钟向服务器发送一个ICMP回显请求。3:循环接收从服务器返回的应答并处理其数据。上代码:#inc原创 2013-02-20 15:56:19 · 1954 阅读 · 1 评论 -
epoll回显服务器
epoll算是LINUX上最高效的服务器开发机制了,相比于select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。因为在内核中的select实现中,它是采用轮询来处理的,轮询的fd数目越多,自然耗时越多。epoll的使用非常简单,只需要使用三个函数就行了:epoll_create,epoll_wait,epoll_ctl,以下是使用epoll来实现回显服务器的一个例子,注原创 2013-04-07 21:08:32 · 2230 阅读 · 2 评论 -
LINUX:带输出参数的system函数
在Linux编程中,经常要调用一些系统命令或SHELL脚本来帮助我们完成一些操作,大部分情况下system函数可以胜任,但有时在操作完成之后,我们还要获取它的输出,这时system函数就无能为力了。为此我编写了一个函数,可以先让系统执行一条命令,然后利用管道技术获取它的输出。上代码:#include #include #include #include原创 2012-10-29 22:27:51 · 2660 阅读 · 4 评论 -
用TCP穿透NAT(TCP打洞)的实现
1. TCP穿透原理: 我们假设在两个不同的局域网后面分别有2台客户机A和 B,AB所在的局域网都分别通过一个路由器接入互联网。互联网上有一台服务器S。 现在AB是无法直接和对方发送信息的,AB都不知道对方在互联网上真正的IP和端口, AB所在的局域网的路由器只允许内部向外主动发送的信息通过。对于B直接发送给A的路由器的消息,路由会认为其“不被信任”而直接丢弃。原创 2013-04-17 17:23:38 · 19598 阅读 · 11 评论 -
用epoll实现简易的telnet
我承认这篇文章有点标题党,呵呵。其实就是一个能和服务器建立全双工通信的客户端而已,用epoll机制实现。上代码:#include #include #include #include #include #include #include #include //注意,不能一次性输入超过MAXLINE个的字符,否则程序会出错#define MAXLINE 1024//发原创 2013-06-07 11:16:43 · 1706 阅读 · 0 评论 -
用libevent实现简易的telnet
我承认这篇文章有点标题党,呵呵。其实就是一个能和服务器建立全双工通信的客户端而已,用网络库libevent实现。从这里也可以看出,同样的功能,分别用epoll和libevent来比较,从代码量和代码清晰度来说,libevent完胜,呵呵。上代码:#include #include #include #include #include #include #i原创 2013-06-07 13:56:10 · 2626 阅读 · 0 评论 -
int, double, string的转换函数
这几个函数还是挺常用的,在这里记录一下,以后要用的时候就不用重新写啦。#include #include #include #include #include using namespace std;class CommonTool{public: static int CoverStringToInt(const string &value); static strin原创 2013-07-15 10:55:44 · 1635 阅读 · 1 评论 -
LINUX C语言:程序运行时动态加载库函数
PS:相关知识请自己去看man手册,这里只给出一个实例,及创建这个实例的步骤。1:创建test.h, test.c文件//test.h#ifndef TEST_H_#define TEST_H_#include void PrintHello();int Add(int a, int b);#endif//test.cpp#include "test.h原创 2013-02-02 11:12:46 · 4762 阅读 · 0 评论 -
redis网络事件框架的使用
redis封装了一个小型网络库供自己使用,这个网络库只有几百行代码,却基本实现了一个高效的异步网络事件框架,而且与其他redis模块相对独立,故我将其独立出来,方便以后复用。与著名的libevent相比,它代码精简,只实现了最基本的功能,而且没有用上什么高深的技术,十分适合我们学习和借鉴。 以下这个程序实现了一个简单的回显服务器,并且每秒钟在控制台输出一句话。它简单地演示了redis网络模块的使用。 这个程序由6个源文件组成,ae.h, ae.c, ae_epoll.c, anet.h, anet.c原创 2013-11-25 17:33:21 · 3101 阅读 · 7 评论