ust: add ustd
[ust.git] / ustd / ustd.c
CommitLineData
3796af9b
PMF
1#define _GNU_SOURCE
2
3#include <sys/types.h>
4#include <sys/shm.h>
5
6#include <stdlib.h>
7#include <stdio.h>
8#include <string.h>
9
10#include "localerr.h"
11#include "ustcomm.h"
12
13struct buffer_info {
14 char *name;
15 pid_t pid;
16
17 int shmid;
18 void *mem;
19 int memlen;
20
21 int nsubbufs;
22};
23
24int add_buffer(pid_t pid, char *bufname)
25{
26 struct buffer_info *buf;
27 char *send_msg;
28 char *received_msg;
29 int result;
30
31 buf = (struct buffer_info *) malloc(sizeof(struct buffer_info));
32 if(buf == NULL) {
33 ERR("add_buffer: insufficient memory");
34 return -1;
35 }
36
37 buf->name = bufname;
38 buf->pid = pid;
39
40 /* get shmid */
41 asprintf(&send_msg, "get_shmid %s", buf->name);
42 send_message(pid, send_msg, &received_msg);
43 free(send_msg);
44
45 result = sscanf(received_msg, "%d", &buf->shmid);
46 if(result != 1) {
47 ERR("unable to parse response to get_shmid");
48 return -1;
49 }
50 free(received_msg);
51
52 /* get nsubbufs */
53 asprintf(&send_msg, "get_n_subbufs %s", buf->name);
54 send_message(pid, send_msg, &received_msg);
55 free(send_msg);
56
57 result = sscanf(received_msg, "%d", &buf->nsubbufs);
58 if(result != 1) {
59 ERR("unable to parse response to get_shmid");
60 return -1;
61 }
62 free(received_msg);
63
64 /* attach memory */
65 buf->mem = shmat(buf->shmid, NULL, 0);
66 if(buf->mem == (void *) 0) {
67 perror("shmat");
68 return -1;
69 }
70
71 return 0;
72}
73
74int main(int argc, char **argv)
75{
76 struct ustcomm_ustd ustd;
77 int result;
78
79 result = ustcomm_init_ustd(&ustd);
80 if(result == -1) {
81 ERR("failed to initialize socket");
82 return 1;
83 }
84
85 for(;;) {
86 char *recvbuf;
87
88 ustcomm_ustd_recv_message(&ustd, &recvbuf, NULL);
89
90 if(!strncmp(recvbuf, "collect", 7)) {
91 pid_t pid;
92 char *bufname;
93 int result;
94
95 result = sscanf(recvbuf, "%*s %d %50as", &pid, &bufname);
96 if(result != 2) {
97 fprintf(stderr, "parsing error: %s\n", recvbuf);
98 }
99
100 add_buffer(pid, bufname);
101
102 }
103
104 free(recvbuf);
105 }
106
107 return 0;
108}
This page took 0.025244 seconds and 4 git commands to generate.