#include <limits.h> #include <stdlib.h> #include <stdio.h> #include <string.h> #include <unistd.h> #include <sys/stat.h> #include <sys/types.h> int main (int argc, char **argv) { char template[] = "/tmp/wd_test_XXXXXX"; char *tmpdir = mkdtemp(template); if (tmpdir == NULL) { perror ("Couldn't mkdtemp"); exit (-1); } if (chdir (tmpdir) != 0) { perror ("Couldn't chdir into tmpdir"); exit (-1); } /* Go deep. */ int dirslen = PATH_MAX; while (dirslen > 0) { /* We don't do any error checking in case some OS fails. */ mkdir ("subdir", S_IRWXU); chdir ("subdir"); dirslen -= strlen ("subdir"); } /* Make one component inaccessible. */ chmod(tmpdir, 0); /* Remove the current dir (don't check error, might fail). */ rmdir ("../subdir"); execlp ("echo", "echo", "Hello", "World", (char *) NULL); perror ("Couldn't execlp"); return -1; }