正好公司为了检测前台网络,力图收集有力证据与某CDN PK,所以随手写了一个群PING的程序。

写的内容比较简单,没有去特别追求线程效率,也没有去用LINUX 2.6+的殿堂级神器,以追求实现效率为主,一些参数大家可以自己调。

同事后来帮忙补了些日志处理,当然如果有兴趣的,还可以直接与AS3做SOCKET展示。

大致的源码如下:

#Linux REHL 6,x64,4C/32G,GCC

#define MAXTD 2

#include <stdio.h>
#include <string.h>
#include <pthread.h>
#include <stdlib.h>

char IP[230][30];
char *PINGI=NULL;
char *PINGC=NULL;
char *PINGS=NULL;

void *dmlog();

int main(int argc,char *argv[])
{
FILE *fp=NULL;
char *tmpstr=NULL;
char *ipraw;

pthread_t dm[230];
pthread_attr_t attr={0};
int t=0;

if(argc!=4)
{
printf("Not Enough Parameters!,GoodBye Exit(0)!\n");
printf("Or you can try example below:\n");
printf("ping 1 5 300 \n");
printf("Just 1 mens interval\n");
printf("5 means 5 packets\n");
printf("300 menas 300 packet size\n");
exit(0);
}
printf("%s\n",argv[1]);
printf("%s\n",argv[2]);
printf("%s\n",argv[3]);

fp=fopen("./ping.cnf", "r");
PINGI=(char*)malloc(sizeof(char)*10);
PINGC=(char*)malloc(sizeof(char)*2);
PINGS=(char*)malloc(sizeof(char)*10);
tmpstr=(char*)malloc(sizeof(char)*30);
ipraw=(char*)malloc(sizeof(char)*30);

strcpy(PINGI,argv[1]);
strcpy(PINGC,argv[2]);
strcpy(PINGS,argv[3]);

pthread_attr_init (&attr);
pthread_attr_setscope (&attr, PTHREAD_SCOPE_SYSTEM);
pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED);

printf("Here Start Ping Test\n");
printf("Create Thread\n\n\n");

while(fgets(tmpstr,100,fp)!=NULL)
{
sscanf(tmpstr,"%[^\n]",ipraw);
if(strlen(ipraw)!=0)
{
strcpy(IP[t],ipraw);
pthread_create(&dm[t],NULL,(void*)dmlog,(void*)t);
printf("fun:%s,%d,%d,%s\n",ipraw,t,strlen(ipraw),IP[t]);
t++;
}
}

printf("Create Thread Done!\n");

while(1)
{
sleep(8);
printf("I've finished my job ,I wanna go...\n");
exit(0);
}

close(fp);
free(tmpstr);
free(ipraw);
free(PINGI);
free(PINGC);
free(PINGS);

}

void *dmlog(int ag)
{
char *text=NULL;
text=(char *)malloc(sizeof(char)*200);
strcpy(text,"ping -w 6 -i ");
strcat(text,PINGI);
strcat(text," -c ");
strcat(text,PINGC);
strcat(text," -s ");
strcat(text,PINGS);
strcat(text," ");
strcat(text,IP[ag]);
strcat(text," |tee ./logs/");
strcat(text,IP[ag]);
strcat(text,".log");
//printf("PID:%d,THID:%lu,TEXT:%s,ARG:%s\n",getpid(),(unsigned int)pthread_self(),text,IP[ag]);
//printf("%s\n",text);
system(text);
free(text);

}

随记一个C的毫秒级群PING的更多相关文章

  1. Elasticsearch如何做到亿级数据查询毫秒级返回?

    阅读本文大概需要 6 分钟. 如果面试的时候碰到这样一个面试题:ES 在数据量很大的情况下(数十亿级别)如何提高查询效率? 这个问题说白了,就是看你有没有实际用过 ES,因为啥?其实 ES 性能并没有 ...

  2. php Swoole实现毫秒级定时任务

    项目开发中,如果有定时任务的业务要求,我们会使用linux的crontab来解决,但是它的最小粒度是分钟级别,如果要求粒度是秒级别的,甚至毫秒级别的,crontab就无法满足,值得庆幸的是swoole ...

  3. ES 调优查询亿级数据毫秒级返回!怎么做到的?--文件系统缓存

    一道面试题的引入: 如果面试的时候碰到这样一个面试题:ElasticSearch(以下简称ES) 在数据量很大的情况下(数十亿级别)如何提高查询效率? 这个问题说白了,就是看你有没有实际用过 ES,因 ...

  4. 双汇大数据方案选型:从棘手的InfluxDB+Redis到毫秒级查询的TDengine

    双汇发展多个分厂的能源管控大数据系统主要采用两种技术栈:InfluxDB/Redis和Kafka/Redis/HBase/Flink,对于中小型研发团队来讲,无论是系统搭建,还是实施运维都非常棘手.经 ...

  5. 记一个社交APP的开发过程——基础架构选型(转自一位大哥)

    记一个社交APP的开发过程——基础架构选型 目录[-] 基本产品形态 技术选型 最近两周在忙于开发一个社交App,因为之前做过一点儿社交方面的东西,就被拉去做API后端了,一个人头一次完整的去搭这么一 ...

  6. VC中如何获取当前时间(精度达到毫秒级)

    标 题: VC中如何获取当前时间(精度达到毫秒级)作 者: 0xFFFFCCCC时 间: 2013-06-24链 接: http://www.cnblogs.com/Y4ng/p/Millisecon ...

  7. 使用bitset实现毫秒级查询

    前言 因为业务要求api的一次请求响应时间在10ms以内,所以传统的数据库查询操作直接被排除(网络io和磁盘io).通过调研,最终使用了bieset,目前已经正常运行了很久 *** bitset介绍 ...

  8. 毫秒级检测!你见过带GPU的树莓派吗?

    树莓派3B+英特尔神经计算棒进行高速目标检测 转载请注明作者梦里茶 代码: 训练数据预处理: https://gist.github.com/ahangchen/ae1b7562c1f93fdad1d ...

  9. shell脚本示例:计算毫秒级、微秒级时间差

    bash&shell系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html 有时候需要计算命令的执行时间长度,可以使用time命令,虽然t ...

随机推荐

  1. 翻译器DIY————次序

    突然有一种冲动,想要写一个编译器. 因此,检查在网上搜索相关信息,思想direct3D 有本书叫龙,也有个龙书 Compilers Principles,Techniques, & Tool ...

  2. SQL Server 2005,2008 正则表达式 替换函数应用详解

    CREATE function dbo.regexReplace ( @source ntext, --原字符串 ), --正则表达式 ), --替换值 , --是否是全局替换 --是否忽略大小写 ) ...

  3. cocos2d-x v3.2环境配置(现在3.x版本号可以配置该)

     这里介绍的是Windows环境下的cocos2d-x配置. 前提: •Windows 7+ •cocos2d-x v3.2版本号(能够在http://www.cocos2d-x.org/down ...

  4. 古老server源代码迁移到新server

    因为老vsts资源server不久,准备存档,现在在旧的需要server该代码仍然在使用的所有迁移到新的vstsserver在. 因此,我们需要迁移所有需要也许是习惯了新的代码vsts在之上.代码的迁 ...

  5. iOS_20_微博的骨架结构

    最后效果图: BeyondViewController.m // // BeyondViewController.m // 20_帅哥no微博 // // Created by beyond on 1 ...

  6. 一张漫画说尽IT开发过程

  7. 使用Inno Setup 打包jdk、mysql、tomcat、webapp等为一个exe安装包(转)

    之前一直都没涉及到打包安装方面的东西,都是另一个同事负责的,使用的工具(installshield)也比较高大上一点,可是后来他离职以后接受的同事也只能是在这个基础上做个简单的配置,然后打包,可是现在 ...

  8. Mac周边环境 goBASIC语言HelloWorld

    1. 安装mercurial Mercurial 是一种轻量级分布式版本号控制系统,採用 Python 语言实现 能够输入hg命令查询系统是否安装mercurial,能够例如以下两种命令安装 $sud ...

  9. JAVA —— 数组

    import java.util.Arrays; public class Array { public static void main(String[] args){    Array test= ...

  10. Java设计模式菜鸟系列(十三)建模和实现状态模式

    转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39829859 状态模式(State):同意对象在内部状态改变时改变它的行为,对象看起来好像 ...