/* * Copyright (c) Camden Dixie O'Brien * SPDX-License-Identifier: AGPL-3.0-only */ #define _POSIX_C_SOURCE 199309L #include #include #include 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; }