execl()函数问题,帮忙!!
我得程序是这样的:#include <stdio.h>
#include <stdlib.h>
int main()
{
char buf;
for ( ; ; ) {
fgets(buf,100,stdin);
if(strcmp(buf,"quit\n")==0)
break;
execl("/bin/sh","sh","-c",buf,(char *) 0);
printf("\n.....................\n");
}
exit(EXIT_SUCCESS);
}
如果不输入quit的情况下,程序应该是无限循环的,可是实际上程序却不执行printf("\n.....................\n");而直接退出,我搞了半天还没搞懂,请帮忙,谢谢。!!! 而如果改成这样:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char buf;
for ( ; ; ) {
fgets(buf,100,stdin);
if(strcmp(buf,"quit\n")==0)
break;
switch ( fork() ) {
case -1:
_exit(0);
case 0:{
execl("/bin/sh","sh","-c",buf,(char *) 0);
printf("\n.....................\n");
_exit(0);
}
default:
break;
}
}
exit(EXIT_SUCCESS);
}
那么可以进入无限循环,但是输入任意一个指令如:
ls -l
然后用ps命令查看会发现如下提示:
22049 pts/3 00:00:00 ls <defunct>
而后每输入一个指令都会出现一个类似这样的死进程。 你这个break是跳出循环!!!!! !! :mrgreen: 我想不是break 的问题,因为即使程序是这样也不行:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char buf;
for ( ; ; ) {
fgets(buf,100,stdin);
execl("/bin/sh","sh","-c",buf,(char *) 0);
printf("\n.....................\n");
}
exit(EXIT_SUCCESS);
}
同样是执行完第一次输入就直接退出了,并且printf("\n.....................\n"); 就没有执行。我想,主要的问题应该在execl("/bin/sh","sh","-c",buf,(char *) 0); 这一句。 程序没有退出
是fgets要等待 回车!!!(起码 win下这样的) 关于 exec()系列的函数,执行完毕以后,是不会再回到原来的代码下行的!
你可以使用 fork()建立子进程,然后再执行命令,并且使用wait()函数等待子进程的结束.
这种方法 可以用system()或者popen()解决,不过听说会有安全上的问题. :-D
页:
[1]