Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <dlfcn.h>
- #include <sys/mman.h>
- #include <sys/stat.h>
- #include <fcntl.h>
- #include <unistd.h>
- #include <sys/types.h>
- #include <semaphore.h>
- #include <string.h>
- typedef struct {
- sem_t request_ready; // начальное значение 0
- sem_t response_ready; // начальное значение 0
- char func_name[20];
- double value;
- double result;
- } shared_data_t;
- typedef double (*function)(double);
- int main(int argc, char** argv) {
- void* lib = dlopen(argv[1], RTLD_LAZY);
- int shrd = shm_open("/pva_shrd", O_CREAT | O_RDWR, 0777);
- ftruncate(shrd, sizeof(shared_data_t));
- void* mmap_ptr = mmap(NULL, sizeof(shared_data_t), PROT_READ | PROT_WRITE, MAP_SHARED, shrd, 0);
- shared_data_t* task_ptr;
- task_ptr = mmap_ptr;
- sem_init(&task_ptr->request_ready, 1, 0);
- sem_init(&task_ptr->response_ready, 1, 0);
- printf("/pva_shrd\n");
- fflush(stdout);
- char func_name[20];
- int i = 0;
- while (1) {
- sem_wait(&task_ptr->request_ready);
- sscanf(task_ptr->func_name, "%s", func_name);
- if (strlen(task_ptr->func_name) == 0) {
- break;
- }
- function foo = dlsym(lib, task_ptr->func_name);
- task_ptr->result = foo(task_ptr->value);
- sem_post(&task_ptr->response_ready);
- }
- munmap(mmap_ptr, sizeof(shared_data_t));
- shm_unlink("/pva_shrd");
- dlclose(lib);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement