#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <ctype.h>
#include <sys/wait.h>
#include <fcntl.h>
char cmd[1024] = {0};
char* argv[32];
int argc = 0;
void do_face(){
printf("[san@localhost]$ ");
fflush(stdout);
memset(cmd, 0x00,1024);
if(scanf("%[^\n]%*c",cmd) != 1){
getchar();
}
return;
printf("%s\n",cmd);
}
void do_parse(){
argc = 0;
char* ptr = cmd;
while(*ptr != '\0'){
if(!isspace(*ptr)){
argv[argc++] = ptr;
while(!isspace(*ptr)&&*ptr != '\0'){
ptr++;
}
} else{
*ptr = '\0';
ptr++;
}
}
argv[argc] = NULL;
}
int main(){
while(1){
do_face();
char* ptr = cmd;
int redirect = 0;
char* file = NULL;
while(*ptr != '\0'){
if(*ptr == '>'){
redirect = 1;
*ptr++ = '\0';
if(*ptr == '>'){
redirect = 2;
*ptr++ = '\0';
}
while(isspace(*ptr) && *ptr != '\0'){
ptr++;
}
file = ptr;
while(!isspace(*ptr) && *ptr != '\0'){
ptr++;
}
*ptr = '\0';
}
ptr++;
}
do_parse();
pid_t pid = fork();
if(pid < 0){
exit(-1);
}else if(pid == 0){
if(redirect == 1){
int fd = open(file,O_CREAT|O_WRONLY|O_TRUNC,0664);
dup2(fd,1);
}else if (redirect == 2){
int fd = open(file,O_CREAT|O_WRONLY|O_APPEND,0644);
dup2(fd,1);
}
execvp(argv[0],argv);
exit(0);
}
wait(NULL);
}
return 0;
}
重定向的shell
最新推荐文章于 2023-01-03 10:16:23 发布