fenstein 发表于 2005-3-15 17:40:38

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");而直接退出,我搞了半天还没搞懂,请帮忙,谢谢。!!!

fenstein 发表于 2005-3-15 17:48:55

而如果改成这样:
#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>
而后每输入一个指令都会出现一个类似这样的死进程。

BOoRFGOnZ 发表于 2005-3-15 20:14:37

你这个break是跳出循环!!!!! !! :mrgreen:

fenstein 发表于 2005-3-16 09:15:10

我想不是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); 这一句。

BOoRFGOnZ 发表于 2005-3-16 10:04:12

程序没有退出
是fgets要等待 回车!!!(起码 win下这样的)

BOoRFGOnZ 发表于 2005-3-18 10:01:53

关于 exec()系列的函数,执行完毕以后,是不会再回到原来的代码下行的!
你可以使用 fork()建立子进程,然后再执行命令,并且使用wait()函数等待子进程的结束.
这种方法 可以用system()或者popen()解决,不过听说会有安全上的问题. :-D
页: [1]
查看完整版本: execl()函数问题,帮忙!!