C用execlp实现的linux命令解释器问题
程序代码:
下边是一个unix高级环境编程中的一个实例,可以用来模拟shell,可是自己编译执行起来发现有两个问题: 1.示例中命令提示符是%,本意是执行完一条命令再出来一个提示符,一直循环,直到手动输入终止程序,但每次都是执行完一条就退出了。 2.命令执行完出来两遍结果,情形如下: [root@localhost c]# ./a.out % ls a.out data ls_c.c myexec.c no_cache_io.c no_cache_io_v2.c a.out data ls_c.c myexec.c no_cache_io.c no_cache_io_v2.c [root@localhost c]# pwd 附示例中的ourhdr.h头文件:[local]2[/local],求解惑。 /**********************************************/ #include <sys/types.h> #include <sys/wait.h> #include "ourhdr.h" int main(void) { char buf[MAXLINE]; pid_t pid; int status; printf("%% "); while (fgets(buf, MAXLINE, stdin) != NULL) { buf[strlen(buf)-1] = 0; /*替换换行符为null*/ if (pid = fork() < 0) /*fork一个进程*/ { err_sys("fork error"); } else if (pid == 0) { execlp(buf, buf, (char *) 0); err_ret("couldn't execute: %s", buf); exit(127); } if ((pid = waitpid(pid, &status, 0)) < 0) { err_sys("waitpid error"); } printf("%% "); } exit(0); }
ourhdr.zip
(2.41 KB)