annotate resources/master.c @ 54:7857f8eea835

Add args magic to provide cli-args to user program
author Ben Spoor <ben.spoor@altran.com>
date Thu, 13 Apr 2017 08:09:16 +0000
parents 8acbab5a9f21
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
36
8acbab5a9f21 Remove stream buffering on stdout & stderr
Louis 'Kureuil' Person <louis.person@epitech.eu>
parents:
diff changeset
1 #include <stdlib.h>
8acbab5a9f21 Remove stream buffering on stdout & stderr
Louis 'Kureuil' Person <louis.person@epitech.eu>
parents:
diff changeset
2 #include <stdio.h>
8acbab5a9f21 Remove stream buffering on stdout & stderr
Louis 'Kureuil' Person <louis.person@epitech.eu>
parents:
diff changeset
3 #include <dlfcn.h>
8acbab5a9f21 Remove stream buffering on stdout & stderr
Louis 'Kureuil' Person <louis.person@epitech.eu>
parents:
diff changeset
4
8acbab5a9f21 Remove stream buffering on stdout & stderr
Louis 'Kureuil' Person <louis.person@epitech.eu>
parents:
diff changeset
5 typedef int (*main_t)(int, char **, char **);
8acbab5a9f21 Remove stream buffering on stdout & stderr
Louis 'Kureuil' Person <louis.person@epitech.eu>
parents:
diff changeset
6
8acbab5a9f21 Remove stream buffering on stdout & stderr
Louis 'Kureuil' Person <louis.person@epitech.eu>
parents:
diff changeset
7 int main(int argc, char **argv, char **envp)
8acbab5a9f21 Remove stream buffering on stdout & stderr
Louis 'Kureuil' Person <louis.person@epitech.eu>
parents:
diff changeset
8 {
8acbab5a9f21 Remove stream buffering on stdout & stderr
Louis 'Kureuil' Person <louis.person@epitech.eu>
parents:
diff changeset
9 char *error = NULL;
8acbab5a9f21 Remove stream buffering on stdout & stderr
Louis 'Kureuil' Person <louis.person@epitech.eu>
parents:
diff changeset
10
8acbab5a9f21 Remove stream buffering on stdout & stderr
Louis 'Kureuil' Person <louis.person@epitech.eu>
parents:
diff changeset
11 setbuf(stdout, NULL);
8acbab5a9f21 Remove stream buffering on stdout & stderr
Louis 'Kureuil' Person <louis.person@epitech.eu>
parents:
diff changeset
12 setbuf(stderr, NULL);
8acbab5a9f21 Remove stream buffering on stdout & stderr
Louis 'Kureuil' Person <louis.person@epitech.eu>
parents:
diff changeset
13 if (argc < 2) {
8acbab5a9f21 Remove stream buffering on stdout & stderr
Louis 'Kureuil' Person <louis.person@epitech.eu>
parents:
diff changeset
14 fprintf(stderr, "USAGE: %s PROGRAM\nWhere PROGRAM is the user's program to supervise\n", argv[0]);
8acbab5a9f21 Remove stream buffering on stdout & stderr
Louis 'Kureuil' Person <louis.person@epitech.eu>
parents:
diff changeset
15 return EXIT_FAILURE;
8acbab5a9f21 Remove stream buffering on stdout & stderr
Louis 'Kureuil' Person <louis.person@epitech.eu>
parents:
diff changeset
16 }
8acbab5a9f21 Remove stream buffering on stdout & stderr
Louis 'Kureuil' Person <louis.person@epitech.eu>
parents:
diff changeset
17 void *userhandle = dlopen(argv[1], RTLD_LAZY);
8acbab5a9f21 Remove stream buffering on stdout & stderr
Louis 'Kureuil' Person <louis.person@epitech.eu>
parents:
diff changeset
18 if (userhandle == NULL) {
8acbab5a9f21 Remove stream buffering on stdout & stderr
Louis 'Kureuil' Person <louis.person@epitech.eu>
parents:
diff changeset
19 fprintf(stderr, "%s: %s\n", argv[0], dlerror());
8acbab5a9f21 Remove stream buffering on stdout & stderr
Louis 'Kureuil' Person <louis.person@epitech.eu>
parents:
diff changeset
20 return EXIT_FAILURE;
8acbab5a9f21 Remove stream buffering on stdout & stderr
Louis 'Kureuil' Person <louis.person@epitech.eu>
parents:
diff changeset
21 }
8acbab5a9f21 Remove stream buffering on stdout & stderr
Louis 'Kureuil' Person <louis.person@epitech.eu>
parents:
diff changeset
22 dlerror();
8acbab5a9f21 Remove stream buffering on stdout & stderr
Louis 'Kureuil' Person <louis.person@epitech.eu>
parents:
diff changeset
23 main_t usermain = dlsym(userhandle, "main");
8acbab5a9f21 Remove stream buffering on stdout & stderr
Louis 'Kureuil' Person <louis.person@epitech.eu>
parents:
diff changeset
24 if ((error = dlerror()) != NULL) {
8acbab5a9f21 Remove stream buffering on stdout & stderr
Louis 'Kureuil' Person <louis.person@epitech.eu>
parents:
diff changeset
25 fprintf(stderr, "%s: %s\n", argv[0], error);
8acbab5a9f21 Remove stream buffering on stdout & stderr
Louis 'Kureuil' Person <louis.person@epitech.eu>
parents:
diff changeset
26 return EXIT_FAILURE;
8acbab5a9f21 Remove stream buffering on stdout & stderr
Louis 'Kureuil' Person <louis.person@epitech.eu>
parents:
diff changeset
27 }
54
7857f8eea835 Add args magic to provide cli-args to user program
Ben Spoor <ben.spoor@altran.com>
parents: 36
diff changeset
28
7857f8eea835 Add args magic to provide cli-args to user program
Ben Spoor <ben.spoor@altran.com>
parents: 36
diff changeset
29 /* Call Users main, but make master.c invisible by removing first argument */
7857f8eea835 Add args magic to provide cli-args to user program
Ben Spoor <ben.spoor@altran.com>
parents: 36
diff changeset
30 return usermain(argc-1, argv+1, envp);
7857f8eea835 Add args magic to provide cli-args to user program
Ben Spoor <ben.spoor@altran.com>
parents: 36
diff changeset
31 }