|
|
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.