#include <stdio.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <unistd.h>
#include <string.h>
#include <ctype.h>
void do_shell(int argc, char *argv[])
{
pid_t pid = fork();
if ( pid == 0 ) {
if ( execvp(argv[0], argv) == -1 ) {
perror("execvp");
exit(1);
}
}
else
wait(NULL);
}
//字符串解析
void do_parse( char * buf) {
int argc = 0;
char *argv[8];
int i;
int status = 0;
for (i=0; buf[i]!=0; i++) {
if ( !isspace(buf[i]) && status == 0 ) {
argv[argc++] = &buf[i];
status = 1;
} else if ( isspace(buf[i]) ) {
status = 0;
buf[i] = 0;
}
}
argv[argc] = NULL;
do_shell(argc, argv);
}
int main( void )
{
char buf[1024] = {};
while ( 1 ) {
memset(buf, 0x00, sizeof buf);
printf("myshell: ");
scanf("%[^\n]%*c", buf);
if ( strncmp(buf, "exit", 4) == 0 )
exit(0);
do_parse(buf);
}
}
#include <stdlib.h>
#include <sys/wait.h>
#include <unistd.h>
#include <string.h>
#include <ctype.h>
void do_shell(int argc, char *argv[])
{
pid_t pid = fork();
if ( pid == 0 ) {
if ( execvp(argv[0], argv) == -1 ) {
perror("execvp");
exit(1);
}
}
else
wait(NULL);
}
//字符串解析
void do_parse( char * buf) {
int argc = 0;
char *argv[8];
int i;
int status = 0;
for (i=0; buf[i]!=0; i++) {
if ( !isspace(buf[i]) && status == 0 ) {
argv[argc++] = &buf[i];
status = 1;
} else if ( isspace(buf[i]) ) {
status = 0;
buf[i] = 0;
}
}
argv[argc] = NULL;
do_shell(argc, argv);
}
int main( void )
{
char buf[1024] = {};
while ( 1 ) {
memset(buf, 0x00, sizeof buf);
printf("myshell: ");
scanf("%[^\n]%*c", buf);
if ( strncmp(buf, "exit", 4) == 0 )
exit(0);
do_parse(buf);
}
}