43 lines
844 B
C
43 lines
844 B
C
/*
|
|
* Copyright (c) Camden Dixie O'Brien
|
|
* SPDX-License-Identifier: AGPL-3.0-only
|
|
*/
|
|
|
|
#define _POSIX_C_SOURCE 199309L
|
|
|
|
#include <dlfcn.h>
|
|
#include <stdio.h>
|
|
#include <time.h>
|
|
|
|
typedef const char *(*getmsg_t)(void);
|
|
|
|
int main(void)
|
|
{
|
|
const char *libfn = "libmod.so";
|
|
const char *symn = "getmsg";
|
|
void *mod = NULL;
|
|
getmsg_t getmsg = NULL;
|
|
const struct timespec pause = { .tv_nsec = 100000000 };
|
|
while (1) {
|
|
if (mod)
|
|
dlclose(mod);
|
|
mod = dlopen(libfn, RTLD_NOW);
|
|
if (!mod) {
|
|
fprintf(
|
|
stderr, "Error: couldn't open %s: %s\n", libfn, dlerror());
|
|
return 1;
|
|
}
|
|
getmsg = (getmsg_t)dlsym(mod, symn);
|
|
if (!getmsg) {
|
|
fprintf(
|
|
stderr, "Error: couldn't find symbol %s: %s\n", symn,
|
|
dlerror());
|
|
return 1;
|
|
}
|
|
printf("\33[2K\r%s", getmsg());
|
|
fflush(stdout);
|
|
nanosleep(&pause, NULL);
|
|
}
|
|
return 0;
|
|
}
|