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

菜鸟问题 如何在这个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