⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 自编的linux shell的程序可以模拟实现linux 中SHELL功能
💻 C
字号:
#include"stdio.h"#include"string.h"#include"malloc.h"#include"unistd.h"#include"stdlib.h"#include"sys/types.h"#include"sys/wait.h"#define BUFFERSIZE 255char buffer[BUFFERSIZE+1];int is_fileexist(char *comm);int main(){	char *path;	while(1)	{		path = get_current_dir_name();		printf("%s>$",path);		char lc_char;		int li_inputlen = 0;		char *input;				lc_char = getchar();		while(lc_char != '\n' && li_inputlen < BUFFERSIZE){			buffer[li_inputlen++] = lc_char;			lc_char = getchar();		}		if(li_inputlen >= BUFFERSIZE){			printf("Your command is too long!Please re-enter your command!<=%d\n",BUFFERSIZE);			li_inputlen = 0;			continue ;		}		if(li_inputlen == 0)			continue ;		else			buffer[li_inputlen] = '\0';		input = (char*) malloc(sizeof(char) * (li_inputlen+1));		strcpy(input,buffer);				int i;		int j;		int k;		int is_bj = 0;		int is_back = 0;		int pid;		int status;		char *arg[20];		for(i = 0,j =0, k = 0;i <= li_inputlen;i++){			if(input[i] =='<' || input[i] =='>' || input[i] == '|'){				if(input[i] == '|')					printf("command is not supported!");				else					printf("command is not supported!");				is_bj = 1;				break ;			}			if(input[i] ==' ' || input[i] =='\t' || input[i] =='\0'){				if(j == 0)					continue;				else{					buffer[j++]='\0';					arg[k] = (char *)malloc(sizeof(char)*j);					strcpy(arg[k],buffer);					j = 0;					k++;				}			}			else{				if(input[i] == '&' && input[i+1] == '\0'){					is_back = 1;					continue ;				}				buffer[j++] = input[i];			}		}		free(input);		if(strcmp(arg[0],"leave") ==0){			printf("bye-bye\n");			break ;		}		if(strcmp(arg[0],"cd") ==0)		{			if(k ==1)			continue ;			if(k >2)			printf("parameter error!\n");			else if(chdir(arg[1]) ==-1)			printf("path error!\n");			continue ;		}		if(is_bj ==0){			arg[k] = (char *) 0;			if(is_fileexist(arg[0]) == -1){				printf("This command is not found?!\n");				for(i = 0;i < k; i++)					free(arg[i]);				continue ;			}			else{				if((pid = fork()) ==0)				execv(buffer,arg);				else if(is_back == 0)				    waitpid(pid,&status,0);				for(i = 0;i <k; i++)				   free(arg[i]);    							}		}	}		return 0;}int is_fileexist(char *comm){	char *path,*p;	int i;		i=0;	path = getenv("PATH");	p = path;	while(*p != '\0'){		if(*p != ':')            buffer[i++] = *p;		else{			buffer[i++] = '/';			buffer[i] = '\0';			strcat(buffer,comm);						if(access(buffer,F_OK) ==0)				return 0;			else				i = 0;		}		p++;	}	return -1;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -