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

菜鸟求助关于fork、wait、exec族函数的综合问题
在linux系统下用fork()、wait()、exec族函数做一个程序
要求:以%号为提示符,在%输入任意linux系统指令如“ls -l”后执行,执行结束后返回提示符%,继续等待输入指令
我们老师给的提示是死循环,但是我想不明白到底该怎么做……求解惑

------解决方案--------------------
C/C++ code

#include <unistd.h>
#include <sys/wait.h>
#include <stdlib.h>
#include <string.h>
#define MAXLINE 4096
int main(int argc, char* argv[])
{
    char  str[MAXLINE];
    pid_t pid;
    
    while(1)
    {
        putchar('%');
        gets(str);
        
        if (str == NULL)
            return (1);
        
        if (strcmp(str, "q") == 0 || strcmp(str, "Q") == 0)
            break;
        if ((pid = fork()) < 0)
        {
            perror("fork error");
        }
        else if (pid == 0)
        {
            if (execl("/bin/sh", "sh", "-c", str, (char *)0) < 0)
            { 
                perror("execl error");
                continue ;
            }
        }
        else  {
            if(waitpid(pid, 0, 0) < 0)
            {
                perror("waitpid error");
                return 1;
            }
        }
    }
    return 0;
}

------解决方案--------------------
探讨

这不是作业,是我们的一道思考题,主要是我的循环那里出了些问题