随记一个C的毫秒级群PING
?
正好公司為了檢測(cè)前臺(tái)網(wǎng)絡(luò),力圖收集有力證據(jù)與某CDN PK,所以隨手寫了一個(gè)群PING的程序。
寫的內(nèi)容比較簡(jiǎn)單,沒有去特別追求線程效率,也沒有去用LINUX 2.6+的殿堂級(jí)神器,以追求實(shí)現(xiàn)效率為主,一些參數(shù)大家可以自己調(diào)。
同事后來幫忙補(bǔ)了些日志處理,當(dāng)然如果有興趣的,還可以直接與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);
}
?
轉(zhuǎn)載于:https://www.cnblogs.com/zacard-orc/p/3466135.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的随记一个C的毫秒级群PING的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 边际效用递减的原因有哪些
- 下一篇: 基于visual Studio2013解