cis-lclient06:~/class/nov22>more exec8.c #include #include #include #include #include #define SIZE 40 int main(void) { char buf[SIZE+1], argv0[SIZE], argv1[SIZE], argv2[SIZE]; int argc; printf("\n->"); if (gets(buf) == (char *) NULL) exit(1); /* GETS IS UNSAFE */ argv0[0] = '\0'; argc = sscanf(buf, "%s %s %s", argv0, argv1, argv2); printf("argc = %d, strlen(argv0) = %d\n", argc, strlen(argv0)); switch (argc) { case 1: execlp(argv0, argv0, (char *) NULL); printf("argc = %d, strlen(argv0) = %d\n", argc, strlen(argv0)); break; case 2: execlp(argv0, argv0, argv1, (char *) NULL); break; case 3: execlp(argv0, argv0, argv1, argv2, (char *) NULL); break; } printf("%s: command not found\n", argv0); } cis-lclient06:~/class/nov22>gcc exec8.c /tmp/ccUJ4lr5.o: In function `main': exec8.c:(.text+0x24): warning: the `gets' function is dangerous and should not be used. cis-lclient06:~/class/nov22>./a.out ->ps argc = 1, strlen(argv0) = 2 PID TTY TIME CMD 14862 pts/1 00:00:00 tcsh 16404 pts/1 00:00:00 ps cis-lclient06:~/class/nov22>./a.out ->ps -lax argc = 2, strlen(argv0) = 2 Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND 4 0 1 0 20 0 2924 1260 poll_s Ss ? 0:02 /sbin/init 1 0 2 0 20 0 0 0 kthrea S ? 0:00 [kthreadd] 1 0 3 2 -100 - 0 0 migrat S ? 0:00 [migration/0] 1 0 4 2 20 0 0 0 run_ks S ? 0:53 [ksoftirqd/0] ... cis-lclient06:~/class/nov22>