// Inserts the provided word into the tree and increments the count. Also, stores // that word as occuring on the current line. node *insert(node *n, char *str) { int cmp; if (!n) { n = nodealloc(); n->str = strdup(str); n->count = 1; n->size = 10; n->left = NULL; n->right = NULL; (n->lines)[0] = curline; } else if (!(cmp = strcasecmp(str, n->str))) { n->count++; if (n->count >= n->size) { n->size *= 2; resize(n); if (!n->lines) { return NULL; } } (n->lines)[n->count - 1] = curline; } else if (cmp < 0) { n->left = insert(n->left, str); } else { n->right = insert(n->right, str); } return n; }
Node *node1(int a, Node *b) { Node *x; x = nodealloc(1); x->nobj = a; x->narg[0]=b; return(x); }
Node *node2(int a, Node *b, Node *c) { Node *x; x = nodealloc(2); x->nobj = a; x->narg[0] = b; x->narg[1] = c; return(x); }
Node *node3(int a, Node *b, Node *c, Node *d) { Node *x; x = nodealloc(3); x->nobj = a; x->narg[0] = b; x->narg[1] = c; x->narg[2] = d; return(x); }
Node *node4(int a, Node *b, Node *c, Node *d, Node *e) { Node *x; x = nodealloc(4); x->nobj = a; x->narg[0] = b; x->narg[1] = c; x->narg[2] = d; x->narg[3] = e; return(x); }
int insernext(list_t list ,node_ad_t p,element_t x) { node_ad_t tmp=nodealloc(); if(tmp==nodeNULL) return memoryerr; Nodepool[tmp].element=x; Nodepool[tmp].adnext=Nodepool[p].adnext; Nodepool[p].adnext=tmp; Nodepool[Nodepool[tmp].adnext].adpre=tmp; Nodepool[tmp].adpre=p; if(list.last==p) list.last=tmp; list.eleamount++; return 1; }
/* 使用数组值创建链表 */ clink createclist(int *array,clink *memory,int len) { clink head = NULL; //循环链表的指针 clink before; //前一结点的指针 clink new_node; //新结点的指针 int i; //创建第一个结点 head = nodealloc(memory); //分配结点内存 head->data = array[0]; //创建结点内容 before = head; //指向第一个结点 for(i = 1; i < len; i++) //用循环创建其他结点 { new_node = nodealloc(memory); //分配结点内存 new_node->data = array[i]; //创建结点内容 before->next = new_node; //将前结点指向新结点 before = new_node; //新结点成为前结点 } new_node->next = head; //创建环状链接 return head; //返回链表起始指针 }
list_t creatlist(void) { list_t tmp; tmp.head=nodealloc(); if(tmp.head==nodeNULL) { printf("no memory to use."); } else{ Nodepool[tmp.head].adnext=tmp.head; Nodepool[tmp.head].adpre=tmp.head; tmp.last=tmp.head; tmp.eleamount=0; return tmp; } }
int main(int argc, char **argv) { extern char *optarg; extern int optind; extern char *version; int someflag, ch, i, allflag, showflag; char *p, *group, *nodename, *username; char **exclude; node_t *nodeptr; someflag = 0; showflag = 0; exclusion = 0; debug = 0; errorflag = 0; allflag = 0; grouping = 0; nrofrungroups = 0; testflag = 0; rshport = 0; porttimeout = 5; /* 5 seconds to port timeout */ username = NULL; nodename = NULL; group = NULL; nodeptr = NULL; nodelink = NULL; exclude = NULL; rungroup = calloc(GROUP_MALLOC, sizeof(char **)); if (rungroup == NULL) bailout(); progname = strdup(basename(argv[0])); srand48(getpid()); /* seed the random number generator */ #if defined(__linux__) while ((ch = getopt(argc, argv, "+?adeiqtvg:l:o:p:w:x:")) != -1) #else while ((ch = getopt(argc, argv, "?adeiqtvg:l:o:p:w:x:")) != -1) #endif switch (ch) { case 'a': /* set the allrun flag */ allflag = 1; break; case 'd': /* set the debug flag */ debug = 1; break; case 'e': /* we want stderr to be printed */ errorflag = 1; break; case 'i': /* we want tons of extra info */ debug = 1; break; case 'l': /* invoke me as some other user */ username = strdup(optarg); break; case 'q': /* just show me some info and quit */ showflag = 1; break; case 't': /* test the nodes before connecting */ testflag = 1; break; case 'p': /* what is the rsh port number? */ rshport = atoi(optarg); break; case 'o': /* set the test timeout in seconds */ porttimeout = atoi(optarg); break; case 'g': /* pick a group to run on */ grouping = 1; nrofrungroups = parse_gopt(optarg); break; case 'x': /* exclude nodes, w overrides this */ exclusion = 1; exclude = parse_xopt(optarg); break; case 'w': /* perform operation on these nodes */ someflag = 1; i = 0; for (p = optarg; p != NULL; ) { nodename = (char *)strsep(&p, ","); if (nodename != NULL) (void)nodealloc(nodename); } break; case 'v': (void)printf("%s: %s\n", progname, version); exit(EXIT_SUCCESS); break; case '?': /* you blew it */ (void)fprintf(stderr, "usage: %s [-aeiqtv] [-p portnum] [-o timeout] " "[-g rungroup1,...,rungroupN]\n" "\t[-l username] [-x node1,...,nodeN] [-w node1,..,nodeN] " "[command ...]\n", progname); exit(EXIT_FAILURE); break; default: break; } if (username == NULL && getenv("RCMD_USER")) username = strdup(getenv("RCMD_USER")); if (!rshport && getenv("RCMD_PORT")) rshport = atoi(getenv("RCMD_PORT")); if (!testflag && getenv("RCMD_TEST")) testflag = 1; if (porttimeout == 5 && getenv("RCMD_TEST_TIMEOUT")) porttimeout = atoi(getenv("RCMD_TEST_TIMEOUT")); rshport = get_rshport(testflag, rshport, "RCMD_CMD"); if (!someflag) parse_cluster(exclude); argc -= optind; argv += optind; if (showflag) { do_showcluster(DEFAULT_FANOUT); exit(EXIT_SUCCESS); } do_command(argv, allflag, username); exit(EXIT_SUCCESS); }
int main(int argc, char *argv[]) { extern char *optarg; extern int optind; extern char *version; int someflag, ch, fanout, showflag, fanflag; char *p, *group, *nodename, *username; char **exclude; struct rlimit limit; node_t *nodeptr; someflag = showflag = fanflag = 0; exclusion = debug = batchflag = 0; testflag = rshport = nrofrungroups = 0; showprocs = 20; /* nrof procs to show by default */ interval = 5; /* 5 second delay between node reads */ porttimeout = 5; /* 5 seconds to port timeout */ grouping = 0; fanout = DEFAULT_FANOUT; nodename = NULL; username = NULL; group = NULL; nodeptr = NULL; nodelink = NULL; exclude = NULL; rungroup = calloc(GROUP_MALLOC, sizeof(char **)); if (rungroup == NULL) bailout(); progname = strdup(basename(argv[0])); #if defined(__linux__) while ((ch = getopt(argc, argv, "+?bdqti:f:g:l:m:o:p:s:vw:x:")) != -1) #else while ((ch = getopt(argc, argv, "?bdqti:f:g:l:m:o:p:s:vw:x:")) != -1) #endif switch (ch) { case 'b': batchflag = 1; /* we want batch mode */ break; case 'd': /* we want to debug dsh (hidden)*/ debug = 1; break; case 'i': /* interval between node reads */ interval = atoi(optarg); break; case 'l': /* invoke me as some other user */ username = strdup(optarg); break; case 'q': /* just show me some info and quit */ showflag = 1; break; case 't': /* test the nodes before connecting */ testflag = 1; break; case 'p': /* what is the rsh port number? */ rshport = atoi(optarg); break; case 'o': /* set the test timeout in seconds */ porttimeout = atoi(optarg); break; case 'm': /* set the display mode */ if (strncasecmp(optarg, "proc", 4) == 0) displaymode = DISPLAY_PROC; else if (strncasecmp(optarg, "load", 4) == 0) displaymode = DISPLAY_LOAD; break; case 'f': /* set the fanout size */ fanout = atoi(optarg); fanflag = 1; break; case 'g': /* pick a group to run on */ grouping = 1; nrofrungroups = parse_gopt(optarg); break; case 'v': (void)printf("%s: %s\n", progname, version); exit(EXIT_SUCCESS); break; case 'x': /* exclude nodes, w overrides this */ exclusion = 1; exclude = parse_xopt(optarg); break; case 'w': /* perform operation on these nodes */ someflag = 1; for (p = optarg; p != NULL; ) { nodename = (char *)strsep(&p, ","); if (nodename != NULL) (void)nodealloc(nodename); } break; case '?': /* you blew it */ (void)fprintf(stderr, "usage:\n%s [-bqtv] [-f fanout] [-p portnum] [-o timeout] " "[-g rungroup1,...,rungroupN]\n" " [-l username] [-x node1,...,nodeN] [-w node1,..,nodeN]" " [-m proc|load] [-i interval]\n", progname); return(EXIT_FAILURE); /*NOTREACHED*/ break; default: break; } /* Check for various environment variables and use them if they exist */ if (!fanflag && getenv("FANOUT")) fanout = atoi(getenv("FANOUT")); if (!rshport && getenv("RCMD_PORT")) rshport = atoi(getenv("RCMD_PORT")); if (!testflag && getenv("RCMD_TEST")) testflag = 1; if (porttimeout == 5 && getenv("RCMD_TEST_TIMEOUT")) porttimeout = atoi(getenv("RCMD_TEST_TIMEOUT")); if (username == NULL && getenv("RCMD_USER")) username = strdup(getenv("RCMD_USER")); rshport = get_rshport(testflag, rshport, "RCMD_CMD"); if (!someflag) parse_cluster(exclude); argc -= optind; argv += optind; if (showflag) { do_showcluster(fanout); return(EXIT_SUCCESS); } /* * set per-process limits for max descriptors, this avoids running * out of descriptors and the odd errors that come with that. */ if (getrlimit(RLIMIT_NOFILE, &limit) != 0) bailout(); if (limit.rlim_cur < fanout * 5) { limit.rlim_cur = fanout * 5; if (setrlimit(RLIMIT_NOFILE, &limit) != 0) bailout(); } do_command(fanout, username); return(EXIT_SUCCESS); }
int main(int argc, char **argv) { extern char *optarg; extern int optind; extern char *version; int someflag, ch, i, preserve, recurse; char *p, *nodename, *username, *group; char **exclude; node_t *nodeptr; fanout = 0; quiet = 1; concurrent = 0; someflag = 0; preserve = 0; recurse = 0; exclusion = 0; grouping = 0; nrofrungroups = 0; testflag = 0; rshport = 0; bflag = 0; porttimeout = 5; /* 5 seconds to port timeout */ username = NULL; group = NULL; nodeptr = NULL; nodelink = NULL; exclude = NULL; rungroup = calloc(GROUP_MALLOC, sizeof(char **)); if (rungroup == NULL) bailout(); progname = strdup(basename(argv[0])); #if defined(__linux__) while ((ch = getopt(argc, argv, "+?bcdeprtvf:g:l:n:o:w:x:")) != -1) #else while ((ch = getopt(argc, argv, "?bcdeprtvf:g:l:n:o:w:x:")) != -1) #endif switch (ch) { case 'b': /* set reverse/backwards mode */ bflag = 1; break; case 'c': /* set concurrent mode */ concurrent = 1; break; case 'd': /* hidden debug mode */ debug = 1; break; case 'e': /* display error messages */ quiet = 0; break; case 'p': /* preserve file modes */ preserve = 1; break; case 'r': /* recursive directory operations */ recurse = 1; break; case 't': /* test the nodes before connecting */ testflag = 1; break; case 'n': /* what is the rsh port number? */ rshport = atoi(optarg); break; case 'o': /* set the test timeout in seconds */ porttimeout = atoi(optarg); break; case 'l': /* invoke me as some other user */ username = strdup(optarg); break; case 'f': /* set the fanout size */ fanout = atoi(optarg); break; case 'g': /* pick a group to run on */ grouping = 1; nrofrungroups = parse_gopt(optarg); break; case 'x': /* exclude nodes, w overrides this */ exclusion = 1; exclude = parse_xopt(optarg); break; case 'w': /* perform operation on these nodes */ someflag = 1; i = 0; for (p = optarg; p != NULL; ) { nodename = (char *)strsep(&p, ","); if (nodename != NULL) (void)nodealloc(nodename); } break; case 'v': (void)printf("%s: %s\n", progname, version); exit(EXIT_SUCCESS); break; case '?': (void)fprintf(stderr, "usage: %s [-ceprv] [-f fanout] [-g rungroup1,...,rungroupN] " "[-l username] [-x node1,...,nodeN] [-w node1,..,nodeN] " "source_file1 [source_file2 ... source_fileN] " "[desitination_file]\n", progname); return(EXIT_FAILURE); /* NOTREACHED */ break; default: break; } if (fanout == 0 && getenv("FANOUT")) fanout = atoi(getenv("FANOUT")); else fanout = DEFAULT_FANOUT; if (username == NULL && getenv("RCP_USER")) username = strdup(getenv("RCP_USER")); if (!rshport && getenv("RCP_PORT")) rshport = atoi(getenv("RCP_PORT")); if (!testflag && getenv("RCMD_TEST")) testflag = 1; if (porttimeout == 5 && getenv("RCMD_TEST_TIMEOUT")) porttimeout = atoi(getenv("RCMD_TEST_TIMEOUT")); rshport = get_rshport(testflag, rshport, "RCP_CMD"); if (!someflag) parse_cluster(exclude); argc -= optind; argv += optind; do_copy(argv, recurse, preserve, username); return(EXIT_SUCCESS); }