#define _POSIX_C_SOURCE 200112L
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>

int main(int argc, char *argv[], char *envp[])
{
    char self[1024];
    size_t rc = readlink("/proc/self/exe", self, sizeof(self));
    if (rc != -1) {
        self[rc] = '\0';
    } else {
        strcpy(self, "<unknown>");
    }

    printf("Real executable name is '%s'\n", self);

    for (int i = 0; i < argc; i++) {
        printf("    argv[%i] = \"%s\"\n", i, argv[i]);
    }

    printf("(Re)executing '%s'...\n", argv[0]);
    fflush(stdout);
    
    execve(argv[0], (char *[]) { "huipizda", "arg1", "arg2", NULL}, envp);
    fprintf(stderr, "Unable to run '%s' (%i): %s\n", argv[0], errno, strerror(errno));
}
