Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <sys/signalfd.h>
- #include <sys/mman.h>
- #include <sys/stat.h>
- #include <fcntl.h>
- #include <signal.h>
- #include <stdio.h>
- #include <string.h>
- #include <unistd.h>
- #include <semaphore.h>
- #include <dlfcn.h>
- typedef struct {
- sem_t request_ready;
- sem_t response_ready;
- char func_name[20];
- double value;
- double result;
- } shared_data_t;
- int main(int argc, char** argv) {
- const char shm_name[] = "gachimuchi1488";
- int shm_id = shm_open(shm_name, O_RDWR | O_CREAT, 0666);
- size_t page_size = sysconf(_SC_PAGESIZE);
- size_t map_size = sizeof(shared_data_t);
- if (map_size % page_size > 0) {
- map_size = (map_size / page_size + 1) * page_size;
- }
- ftruncate(shm_id, map_size);
- shared_data_t* shared_data = mmap(NULL, map_size,
- PROT_READ | PROT_WRITE,
- MAP_SHARED, shm_id, 0);
- sem_init(&shared_data->request_ready, 1, 0);
- sem_init(&shared_data->response_ready, 1, 0);
- printf("%s", shm_name);
- fflush(stdout);
- void* shared_lib = dlopen(argv[1], RTLD_LAZY);
- while (1) {
- sem_wait(&shared_data->request_ready);
- if (strlen(shared_data->func_name) == 0) break;
- double (*func)(double) = dlsym(shared_lib, shared_data->func_name);
- shared_data->result = func(shared_data->value);
- sem_post(&shared_data->response_ready);
- }
- sem_destroy(&shared_data->request_ready);
- sem_destroy(&shared_data->response_ready);
- munmap(shared_data, map_size);
- shm_unlink(shm_name);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement