日期:2014-05-16  浏览次数:20611 次

求高手帮我看看,为什么跳出循环后还会再次进入??
程序的功能是想实现从SHELL输入条指令,然后将指令的结果写入文件中,然后加上“-------------------------------------”

[code=C/C++][/code]
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>

int flag = 1;
int main()
{
pid_t pid;
do
{
flag = 1;
pid = fork();
if ( pid < 0)
printf("error");
else if (pid == 0)
{
int fd;
char cmd[20];
printf("输入命令:");
gets(cmd);
if ( strcmp(cmd, "exit") == 0 )
flag = 0;
else
{
printf("child......\n");
fd = open("222.dat",O_WRONLY);
if (fd < 0)
{
perror("error!\n");
exit(1);
}
dup2(fd,1);
printf("-------------------------------\n");
execlp("sh","sh","-c",cmd,NULL);
close(fd);
}
}
else if (pid >0)
{
int value;
wait(NULL);
printf("parent........\n");

}
}while (flag);
execl("/bin/cat","adad","222.dat",NULL);
return 0;
}

------解决方案--------------------
flag为真,do循环会一直进行下去。
------解决方案--------------------
在程序执行过程中flag一直为空,

建议单步调试 查看flag的值的变化过程,就能找到答案,
------解决方案--------------------
你循环中用了fork
fork出的进程继承环境都在循环
你exit只是退出了一个进程,还有其他进程也在循环
你把fork放在循环里面,不是很好,进程数会以循环次数的n次方递增