|
|
1.1 ! root 1: /* ! 2: * Create a bid for the command on the command line ! 3: */ ! 4: #include <stdio.h> ! 5: #include <sys/types.h> ! 6: #include <sys/socket.h> ! 7: #include <netinet/in.h> ! 8: #include <sys/stat.h> ! 9: #include <errno.h> ! 10: #include <pwd.h> ! 11: #include "dsh.h" ! 12: #include "dbid.h" ! 13: ! 14: #define TOKENSIZE 120 ! 15: ! 16: /* ! 17: * Get the next token ! 18: */ ! 19: char * ! 20: nexttoken (p, token) ! 21: char *p; ! 22: char *token; ! 23: { ! 24: while (*p == ' ' || *p == '\t') ! 25: p++; ! 26: while (*p != ' ' && *p != '\t' && *p != 0) ! 27: *token++ = *p++; ! 28: *token = 0; ! 29: return (p); ! 30: } ! 31: ! 32: main (argc, argv) ! 33: int argc; ! 34: char *argv[]; ! 35: { ! 36: char token[TOKENSIZE]; ! 37: char *p; ! 38: bool allfound; ! 39: double la[3]; ! 40: int fd, rv; ! 41: int pid, port; ! 42: struct bidmsg b; ! 43: struct passwd *pwd; ! 44: struct passwd *getpwuid(); ! 45: ! 46: if (argc != 5) { ! 47: fprintf (stderr, "dbid usage: dbid <command> <host> <port#> <host>\n"); ! 48: for (rv = 0; rv <argc; rv++) { ! 49: fprintf (stderr, "%s || ", argv[rv]); ! 50: } ! 51: fprintf (stderr, "\n"); ! 52: exit (-1); ! 53: } ! 54: ! 55: /* find the elements of a pipe */ ! 56: getpath (); ! 57: p = argv[1]; ! 58: strcpy (token, "|"); ! 59: allfound = TRUE; ! 60: while (*p != 0) { ! 61: if (*p != 0 && strcmp ("|", token) == 0) { ! 62: p = nexttoken (p, token); ! 63: if (*token != 0) { ! 64: if (findcmd (token) != 0) { ! 65: allfound = FALSE; ! 66: break; ! 67: } ! 68: } ! 69: } ! 70: p = nexttoken (p, token); ! 71: } ! 72: ! 73: /* get the load average */ ! 74: getloadave (la); ! 75: ! 76: /* simple bidding */ ! 77: if (allfound) { ! 78: b.bm_bid = 10.0 / la[0]; ! 79: } else { ! 80: b.bm_bid = NOBID; ! 81: } ! 82: strcpy (b.bm_host, argv[4]); ! 83: ! 84: /* get the directory to use */ ! 85: pwd = getpwuid (getuid()); ! 86: pid = getpid(); ! 87: rv = getstringrc (".dshrc", "dir", token); ! 88: if (rv < 0) { ! 89: sprintf (b.bm_dir, "%s/dsh%d", pwd->pw_dir, pid); ! 90: } else { ! 91: if (token[0] == '/' || token[0] == '~') { ! 92: /* this is an absolute path */ ! 93: sprintf (b.bm_dir, "%s/dsh%d", token, pid); ! 94: } else { ! 95: /* a relative path */ ! 96: sprintf (b.bm_dir, "%s/%s/dsh%d", pwd->pw_dir, token, pid); ! 97: } ! 98: } ! 99: ! 100: /* return bid */ ! 101: port = 0; /* no particular port */ ! 102: fd = makedgsocket (&port); ! 103: if (fd < 0) { ! 104: error ("dbid: couldn't open socket to send over"); ! 105: } ! 106: /* ! 107: fprintf (stderr, "senddg (%d, %x, %d, %s, %d)\n", ! 108: fd, &b, sizeof (struct bidmsg), argv[2], atoi(argv[3])); ! 109: */ ! 110: rv = senddg (fd, &b, sizeof (struct bidmsg), argv[2], atoi(argv[3])); ! 111: if (rv < 0) { ! 112: error ("dbid: couldn't send bid"); ! 113: } ! 114: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.