|
|
1.1 ! root 1: /* ! 2: * IPC benchmark, ! 3: * write and discard to self using pipes. ! 4: */ ! 5: ! 6: #include <stdio.h> ! 7: #include <signal.h> ! 8: ! 9: #include <sys/types.h> ! 10: #include <sys/socket.h> ! 11: #include <sys/time.h> ! 12: #include <sys/un.h> ! 13: #include <sys/resource.h> ! 14: ! 15: struct sockaddr_un sun; ! 16: struct sockaddr_un myname; ! 17: ! 18: int catchsig(); ! 19: char *malloc(); ! 20: ! 21: main(argc, argv) ! 22: char *argv[]; ! 23: { ! 24: register char *buf; ! 25: register int i, msgs = 0; ! 26: int msglen = 0, ms; ! 27: int pid, s, sunlen; ! 28: ! 29: if (argc < 3) { ! 30: printf("usage: %s #msgs msglen\n", argv[0]); ! 31: exit(1); ! 32: } ! 33: msgs = atoi(argv[1]); ! 34: msglen = atoi(argv[2]); ! 35: buf = malloc(msglen); ! 36: if (buf == 0) { ! 37: printf("Couldn't allocate data buffer\n"); ! 38: exit(1); ! 39: } ! 40: myname.sun_family = AF_UNIX; ! 41: signal(SIGINT, catchsig); ! 42: s = socket(AF_UNIX, SOCK_DGRAM, 0); ! 43: if (s < 0) { ! 44: perror("socket"); ! 45: exit(1); ! 46: } ! 47: sprintf(myname.sun_path, "unixdg%d", getpid()); ! 48: sunlen = strlen(myname.sun_path) + 2; ! 49: if (bind(s, &myname, sunlen) < 0) { ! 50: perror("bind"); ! 51: exit(1); ! 52: } ! 53: for (i = 0; i < msgs; i++) { ! 54: sunlen = strlen(myname.sun_path) + 2; ! 55: if (sendto(s, buf, msglen, 0, &myname, sunlen) < 0) ! 56: perror("sendto (parent)"); ! 57: if (recvfrom(s, buf, msglen, 0, &sun, &sunlen) < 0) ! 58: perror("recvfrom (parent)"); ! 59: } ! 60: close(s); ! 61: unlink(myname.sun_path); ! 62: } ! 63: ! 64: catchsig(s) ! 65: int s; ! 66: { ! 67: ! 68: unlink(myname.sun_path); ! 69: exit(1); ! 70: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.