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);
}









