/** * "break" statement */ dobreak() { loop_t *ptr; if ((ptr = readloop ()) == 0) return; gen_modify_stack (ptr->stack_pointer); gen_jump (ptr->exit_label); }
int main(int argc, char** argv) { int c; struct addrinfo* ai; char* h; opterr = 0; /* don't want getopt() writing to stderr */ while ((c = getopt(argc, argv, "v")) != -1) { switch (c) { case 'v': verbose++; break; case '?': err_quit("unrecognized option: %c", c); } } if (optind != argc - 1) err_quit("usage: ping [ -v ] <hostname>"); host = argv[optind]; pid = getpid() & 0xffff; /* ICMP ID field is 16 bits */ Signal(SIGALRM, sig_alrm); ai = Host_serv(host, NULL, 0, 0); h = Sock_ntop_host(ai->ai_addr, ai->ai_addrlen); printf("PING %s (%s): %d data bytes\n", ai->ai_canonname ? ai->ai_canonname : h, h, datalen); /* 4initialize according to protocol */ if (ai->ai_family == AF_INET) { pr = &proto_v4; #ifdef IPV6 } else if (ai->ai_family == AF_INET6) { pr = &proto_v6; if (IN6_IS_ADDR_V4MAPPED( &(((struct sockaddr_in6*)ai->ai_addr)->sin6_addr))) err_quit("cannot ping IPv4-mapped IPv6 address"); #endif } else err_quit("unknown address family %d", ai->ai_family); pr->sasend = ai->ai_addr; pr->sarecv = Calloc(1, ai->ai_addrlen); pr->salen = ai->ai_addrlen; readloop(); exit(0); }
/* Read file FN into set<word> S, then print every (word, count) * pair to stdout.*/ void tokenize_file(const char *fn, set *s, int case_sensitive) { int fd = open(fn, O_RDONLY, 0); int skipped, res; if (fd == -1) { /* warn and skip it */ perror(fn); printf(" SKIP\n"); } else { skipped = readloop(fd, s, case_sensitive, scanner); res = close(fd); assert(res == 0); printf(skipped ? " SKIP\n" : " DONE\n"); } }
/* * Create a new note */ void add_new_note(void) { struct vnote *v; v = vnote_new(); if (v) { v->uid = malloc(128); generate_uuid(v->uid); v->color_red = pastel_palette[3][0]; v->color_green = pastel_palette[3][1]; v->color_blue = pastel_palette[3][2]; v->body = strdup(_("Click on any note to edit it.")); write_vnote_to_server(v); vnote_free(v); } readloop(readfwd, eUseDefault); }
/** * "for" statement */ dofor() { loop_t loop; loop_t *p; loop.symbol_idx = local_table_index; loop.stack_pointer = stkp; loop.type = WSFOR; loop.test_label = getlabel (); loop.cont_label = getlabel (); loop.body_label = getlabel (); loop.exit_label = getlabel (); addloop (&loop); p = readloop (); needbrack ("("); if (!match (";")) { expression (YES); need_semicolon (); } generate_label (p->test_label); if (!match (";")) { expression (YES); gen_test_jump (p->body_label, TRUE); gen_jump (p->exit_label); need_semicolon (); } else p->test_label = p->body_label; generate_label (p->cont_label); if (!match (")")) { expression (YES); needbrack (")"); gen_jump (p->test_label); } else p->cont_label = p->test_label; generate_label (p->body_label); statement (NO); gen_jump (p->cont_label); generate_label (p->exit_label); local_table_index = p->symbol_idx; stkp = gen_modify_stack (p->stack_pointer); delloop (); }
int main(int argc, char **argv) { int n; struct addrinfo *ai; char *h; opterr = 0; /* don't want getopt() writing to stderr */ /* 只实现ping的一个参数选项-v供查询 */ /* 有关getopt函数的使用可以查阅相关资料 */ while( (n = getopt(argc, argv, "v")) != -1) { switch(n) { case 'v': verbose++; break; case '?': printf("unrecognize option: %c\n", n); exit(1); } } if(optind != argc-1) { perror("usage: ping [ -v ] <hostname>"); exit(1); } host = argv[optind]; pid = getpid() & 0xffff; /* ICMP ID field is 16 bits */ MySignal(SIGALRM, sig_alrm); MySignal(SIGINT, statistics); /* 将主机名和服务名映射到一个地址,并返回指向addrinfo的指针 */ ai = host_serv(host, NULL, 0, 0); /* 将网络字节序的地址转换为字符串格式地址,并返回该字符串的指针 */ h = Sock_ntop_host(ai->ai_addr, ai->ai_addrlen); /* 显示PING的主机名、地址与数据字节数 */ printf("PING %s (%s) %d bytes of data.\n", ai->ai_canonname ? ai->ai_canonname : h, h, datalen); /* initialize according to protocol */ if(ai->ai_family == AF_INET) { pr = &proto_v4;/* proto结构指针pr指向对应域的结构,这里是IPv4域的结构 */ #ifdef IPV6 }else if(ai->family == AF_INET6) { pr = &proc_v6; if(IN6_IS_ADDR_V4MAPPED(&(((struct sockaddr_in6 *)ai->ai_addr)->sin6_addr))) { perror("connot ping IPv4-mapped IPv6 address"); exit(1); } #endif }else { printf("unknown address family %d", ai->ai_family); exit(1); } pr->sasend = ai->ai_addr;/* 发送地址赋值 */ pr->sarecv = (struct sockaddr *)Calloc(1, ai->ai_addrlen); pr->salen = ai->ai_addrlen;/* 地址的大小 */ /* 处理数据 */ readloop(); exit(0); }