小技巧(打开文件之后就是16进制的数据)
//将字节数据输出到文件,记录日志
static void fileWriteLog(char *p, long count)
{
const char *filename = "/var/log/huituo/jt808_log/other.log";
FILE *fp1;
//以追加读写的方式打开文件
fp1 = fopen(filename, "a+");//失败返回NULL
if (fp1 == NULL)
{
printf("open file %s failed!", filename);
}
fwrite(p, count, 1, fp1);
//关闭文件
fclose(fp1);
}
void main()
{
//msg->buffer是一个字节数组 ,msg->size是字节数组的长度
char buf[128] = { 0 };
for (int i = 0; i < msg->size; ++i)
{
sprintf(buf, "%02x", msg->buffer[i]);//一个字节一个字节的往里写
//写日志到文件
fileWriteLog(buf, strlen(buf));
}
char ch[]="\n";//添加换行符
fileWriteLog(ch, 1);
}
性能测试分为Mbps 和Tps。
Mbps=Mbit/s即兆比特每秒(1,000,000bit/s),Million bits per second的缩写,是一种传输速率单位,指每秒传输的位(比特)数量。
其中:bit代表位或比特,存放一位二进制数,即 0 或 1,最小的存储单位Byte代表字节,8个二进制位为一个字节,即1Byte=8bit,Byte为数据量常用单位。
bps是每秒比特率,8bps=1B/s(字节)
而M是2的20次方,或略作10的6次方。
所以1Mbps=1024Kbps或128KB/s(就是我们常见的网速转换)
1024Kbps / 8 = 128KB/s
TPS:Transactions Per Second(每秒传输的事物处理个数),即服务器每秒处理的事务数。
如何计算Mbps:
首先计算处理任务所需时间:
//Linux环境下:
#define MAX_TEST_DATA_LENGTH 1024*1024 //1M数据
struct timeval tv_begin, tv_end;
double diff_time;
double dSpeedMbps;
gettimeofday(&tv_begin, NULL);//开始时间
进行处理数据。。。。。
gettimeofday(&tv_end, NULL);//结束时间
diff_time = (double)((tv_end.tv_sec - tv_begin.tv_sec)*1000000 + (tv_end.tv_usec - tv_begin.tv_usec) )/1000000; //单位s
dSpeedMbps = MAX_TEST_DATA_LENGTH * 8.0 / (1024 * 1024 * diff_time);
printf("\nTime used: %.2f seconds, Average speed: %.2f Mbps\n\n", diff_time, dSpeedMbps);
注意"/" 除号,如果除号两边有一边数据为double型,则输出的数据可以用double变量保存,会保留小数位,具体保留几位,用 %.2f 就是保留小数点后两位,用 %.8f 就是保留小数点后八位。
1、%lf 双精度浮点型,也就是double型的格式,默认保留6位小数。
如:double a = 1.2; printf(“%lf”,a); //1.200000。
2、%.2lf 同上,不过限制了,值保留2位小数。
如:double a = 1.2345; printf(“%.2lf”,a); //1.23。
3、%.2f 表示单精度浮点型,也就是float型的格式。
如:float a = 1.2731; printf(“%.2f”,a); //1.27。
如何计算Tps:
//Linux环境下:
#define TIMES 10000 //执行10000次
struct timeval tv_begin, tv_end;
double diff_time;
double nSpeedTps;
gettimeofday(&tv_begin, NULL);//开始时间
执行次数。。。。
gettimeofday(&tv_end, NULL);//结束时间
diff_time = (double)((tv_end.tv_sec - tv_begin.tv_sec)*1000000 + (tv_end.tv_usec - tv_begin.tv_usec) )/1000000; //单位s
nSpeedTps = TIMES / diff_time;
printf("\nTime used: %.2f seconds, Average speed: %d Tps\n\n", diff_time, nSpeedTps);
//将测试记录输出到文件,记录日志
void fileWriteLog(char *p, long count)
{
const char *filename = "c:\\loadrunnerLog.txt";
FILE *fp1;
//以追加读写的方式打开文件
#ifdef WIN32
fopen_s(&fp1, filename, "a+");//如果成功返回0,失败则返回相应的错误代码
if (!fp1)
{
printf("open file %s failed!", filename);
}
#else
fp1 = fopen(filename, "a+");//失败返回NULL
if (fp1 == NULL)
{
printf("open file %s failed!", filename);
}
#endif
fwrite(p, count, 1, fp1);
//关闭文件
fclose(fp1);
}
char logChar[120] = { 0 };
sprintf(logChar, "\nECCGenkeyPair %d times diff_time = %.2f ms, average speed = %d Tps\n",TIMES, diff_time, nSpeedTps);
fileWriteLog(logChar, strlen(logChar));