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