pid_t smtpmail(char **to, char *subject, char *file) { int fd, fd0, wfd, i, j = -1; pid_t pid; char buf[MAXLINE]; char sendmail[MAXPATH], *mail; char **av; struct utsname ubuf; char *paths[] = { "/usr/bin", "/bin", "/usr/sbin", "/usr/etc", "/etc", "/usr/lib", "/usr/local/bin", 0 }; while (paths[++j]) { sprintf(sendmail, "%s/sendmail", paths[j]); if (access(sendmail, X_OK) == 0) { FILE *f, *pipe; av = addLine(0, strdup(sendmail)); av = addLine(av, strdup("-i")); EACH (to) av = addLine(av, strdup(to[i])); av = addLine(av, 0); pid = spawnvpio(&wfd, 0, 0, av + 1); freeLines(av, free); if (pid == -1) return (pid); pipe = fdopen(wfd, "w"); fputs("To: ", pipe); EACH (to) { unless (i == 1) fprintf(pipe, ", "); fprintf(pipe, "%s", to[i]); } fputs("\n", pipe); if (subject && *subject) { fprintf(pipe, "Subject: %s\n", subject); } fputs("\n", pipe); f = fopen(file, "r"); while (fgets(buf, sizeof(buf), f)) fputs(buf, pipe); fclose(f); fclose(pipe); return pid; } }
pair<Weight, Edges> minimumSpanningForest(const Graph &g) { int n = g.size(); UnionFind uf(n); priority_queue<Edge> Q; REP(u, n) EACH(e, g[u]) if (u < e->dst) Q.push(*e); Weight total = 0; Edges F; while (F.size() < n-1 && !Q.empty()) { Edge e = Q.top(); Q.pop(); if (uf.unionSet(e.src, e.dst)) { F.push_back(e); total += e.weight; } } return pair<Weight, Edges>(total, F); }
int main(void) { int a[5] = {0, 1, 2, 3, 4}; int i = 0; printf("sizeof(a) = %d sizeof(*a) = %d\n", sizeof(a), sizeof(*a)); printf("sizeof(a) / sizeof(*a) = %d\n", sizeof(a) / sizeof(*a)); DIV_LINE; printf("DIM(a) = %d\n", DIM(a)); DIV_LINE; int* p = a; EACH(5) printf("a[%d] = %d [p+%d] = %0X [*p+%d] = %d\n", i, a[i], i, p+i, i, *p+i); return 0; }