#define _GNU_SOURCE #include #include #include #include #include #include #include int main(int argc, char *argv[]) { char buf[1024]; int mfd, n, cs; mfd = memfd_create("", MFD_CLOEXEC); if(mfd < 0) exit(1); while((n = read(0, buf, sizeof buf)) > 0) if(write(mfd, buf, n) != n) exit(2); switch(fork()){ case -1: exit(3); case 0: snprintf(buf, sizeof buf, "/proc/self/fd/%d", mfd); execl(buf, "", NULL); exit(66); default: wait(&cs); } exit(cs); }