lcc/clcc/remote/hash_map/hash_map.c (61 lines of code) (raw):
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
#include "clcc.h"
#define TASK_COMM_LEN 16
struct data_t {
unsigned int c_pid;
unsigned int p_pid;
char c_comm[TASK_COMM_LEN];
char p_comm[TASK_COMM_LEN];
};
void event_cb(void *ctx, int cpu, void *data, unsigned int size){
struct data_t *e = (struct data_t *)data;
printf("poll message: c_pid:%d, p_pid:%d\n", e->c_pid, e->p_pid);
printf("c_comm:%s, p_comm:%s\n", e->c_comm, e->p_comm);
}
void event_run(struct clcc_struct* pclcc) {
int event_id;
event_id = pclcc->get_maps_id("e_out");
if (event_id < 0) {
printf("get %s map id failed.\n", "e_out");
return;
}
pclcc->set_event_cb(event_id, event_cb, NULL);
pclcc->event_loop(event_id, 10);
}
static void report(struct clcc_struct* pclcc) {
int hash_id;
unsigned int pid = 0, pid_next;
unsigned int cnt;
hash_id = pclcc->get_maps_id("pid_cnt");
if (hash_id < 0) {
printf("get %s map id failed.\n", "pid_cnt");
return;
}
while (!pclcc->map_get_next_key(hash_id, &pid, &pid_next)) {
pclcc->map_lookup_elem(hash_id, &pid_next, &cnt);
printf("pid: %d, count: %d\n", pid, cnt);
pid = pid_next;
}
}
static void stop(int signo){
printf("signal.\n");
}
int main(int argc,char *argv[]) {
struct clcc_struct* pclcc = clcc_init("./"SO_NAME);
if (pclcc == NULL) {
printf("open so file failed.\n");
exit(-1);
}
signal(SIGINT, stop);
pclcc->init(-1, 1);
printf("The program starts executing and will exit after 10 seconds.\n");
event_run(pclcc);
printf("report:\n");
report(pclcc);
pclcc->exit();
clcc_deinit(pclcc);
return 0;
}