📄 wlan-gnuscript.cc
字号:
#include <stdio.h>#include <string.h>#include <assert.h>void usage(const char* prog){ fprintf(stderr, "usage:\n"); fprintf(stderr, " %s <scenario> <mode = lat | bw | latdist>\n", prog);}int main(int argc, char** argv){ const char* scenario = argv[1]; const char* mode = argv[2]; const char* label; char scratch[20]; char number[20]; float max = 0.0, num; int flow, ret, ymax; int argp = 3, first = 1; if (argc < 3) { usage(argv[0]); } printf("load \"%s.title\"\n", scenario); if (strcasecmp(mode, "lat") == 0) { printf("set xlabel \"time(secs)\"\n"); printf("set ylabel \"latency(ms)\"\n"); printf("plot \\\n"); while (scanf("%d", &flow) != EOF) { if (argp < argc) { label = argv[argp++]; } else { sprintf(scratch, "Flow_%d", flow); label = scratch; } if (strcasecmp(label, "end") == 0) break; if (strcasecmp(label, "drop") == 0) { ret = scanf("%s%s%s", number, number, number); assert(ret != EOF); continue; } if (!first) printf(", \\\n"); first = 0; ret = scanf("%f", &num); assert(ret != EOF); if (num > max) max = num; /* read the trailing ms behind the max */ ret = scanf("%s", number); assert(ret != EOF); printf(" \"%s.%d.lat\" using 1:($2*1000) title \"%s (", scenario, flow, label); ret = scanf("%s", number); assert(ret != EOF); printf("Mean lat = %8s, ", number); ret = scanf("%s", number); assert(ret != EOF); printf("dev = %8s", number); printf(")\" with lines"); } } else if (strcasecmp(mode, "bw") == 0) { printf("set xlabel \"time(secs)\"\n"); printf("set ylabel \"Bandwidth(Mb/s)\"\n"); printf("plot \\\n"); while (scanf("%d", &flow) != EOF) { if (argp < argc) { label = argv[argp++]; } else { sprintf(scratch, "Flow_%d", flow); label = scratch; } if (strcasecmp(label, "end") == 0) break; if (strcasecmp(label, "drop") == 0) { ret = scanf("%s%s%s%s", number, number, number, number); assert(ret != EOF); continue; } if (!first) printf(", \\\n"); first = 0; printf(" \"%s.%d.bw\" using 1:($2*8.0/1000000.0) title \"%s (", scenario, flow, label); ret = scanf("%s", number); assert(ret != EOF); printf("IFQ/MAC drops = %s/", number); ret = scanf("%s", number); assert(ret != EOF); printf("%s, ", number); ret = scanf("%s", number); assert(ret != EOF); sscanf(number, "%f", &num); printf("Total b/w = %.2fMb/s", (double)num*1024.0*8.0/1000000.0); ret = scanf("%s", number); assert(ret != EOF); sscanf(number, "%f", &num); if (num > max) max = num; printf(")\" with lines"); } max = max*1024.0*8.0/1000000.0; } else if (strcasecmp(mode, "latdist") == 0) { max = 100.0; printf("set xlabel \"Latency(ms)\"\n"); printf("set ylabel \"cummulative %% of pkts\"\n"); printf("plot 100.0 notitle with lines 0, \\\n"); while (scanf("%d", &flow) != EOF) { if (argp < argc) { label = argv[argp++]; } else { sprintf(scratch, "Flow_%d", flow); label = scratch; } if (strcasecmp(label, "end") == 0) break; if (strcasecmp(label, "drop") == 0) { continue; } if (!first) printf(", \\\n"); first = 0; printf(" \"%s.%d.latdist\" using ($1*1000):2 title \"%s\" with lines", scenario, flow, label); } } else { usage(argv[0]); } printf("\n"); for (ret = 0; max < 100.0; ++ret) max *= 10.0; ymax = (int)(max * 1.3); ymax = ((ymax + 5) / 10) * 10; for (max = ymax; ret--; max = max/10.0); printf("set yrange [0:%.9f]\n", max); printf("set terminal jpeg\n"); printf("set output \"%s.%s.jpeg\"\n", scenario, mode); printf("replot\n"); printf("set terminal x11\n"); printf("set output\n"); printf("replot\n");}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -