菜鸟问题 如何在这个shell中加上cd和exit?
在此谢过了~
求求高手们~
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
#define  MAXLINE   4096
void parse(char *, char * * );
int main(void)
{
    char   buf[MAXLINE];
    pid_t  pid;
    int    status;
    char * args[64];
    printf("%% ");  /* print prompt */
    while (fgets(buf, MAXLINE, stdin) != NULL) {
       if (buf[strlen(buf) - 1] == '\n')
           buf[strlen(buf) - 1] = 0; /* replace newline with null */
       parse(buf, args);
       if ((pid = fork()) < 0) {  /* child */
           printf("fork error");  
      } else if (pid == 0) {
           execvp(* args, args);
           printf("couldn't execute: %s", buf);
           exit(127);
       }
       /* parent */
       if ((pid = waitpid(pid, &status, 0)) < 0)
          printf("waitpid error");
       printf("%% ");
    }
    exit(0);
}
void parse (char *buf, char **args)
{
      while (*buf != '\0')
      {
             while((* buf ==' ')||(* buf == '\t'||(*buf == '\n')))
                 *buf++ = '\0';  
             *args++ = buf;    
             while ((*buf!='\0')&&(* buf!=' ')&&(* buf!= '\t') && (*buf!= '\n'))
                 buf ++;
         }
     *args = '\0';
}
------解决方案--------------------system("cd /");
------解决方案--------------------这个程序写的很干练啊,挺不错的 呵呵
execvp只会从PATH里找可执行文件
system是系统调用
你可以在execvp前做一个判断,如果arg是cd就用system,否则用execvp