亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? myshell8.c

?? 本人自己寫的模擬shell程序
?? C
字號:
////////////////////////////////////////////////////////////
//	filename:	myshell8.c
//	maker:		zhangneng
//	time:		20041205
//////////////////////////////////////////////////////////////

#include <stdio.h>
#include <limits.h>
#include <signal.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>

#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define MAXINPUTLN 120
#define MAXARG 5
#define PIPELINE 5
#define MAXNAME 100
#define OPEN_MAX 10
#define PATHLN 50//

char inputln[MAXINPUTLN+1];
char *inputlnptr;
char avline[MAXINPUTLN+1];
char *avptr;
char infile[MAXNAME+1];
char outfile[MAXNAME+1];
char list_now[PATHLN+1];//
char re[MAXINPUTLN+1];//
char *reptr;		//

int background;
int lastpid;
int append;
struct cmd
{
	char *av[MAXARG];
	int infd;
	int outfd;
}cmdlin[PIPELINE];

void init_once();
void init_command();
int get_simcom();
void get_word(char *name);
int get_comln();
void run_com(struct cmd *ptr);
void execute(int j);
void get_simarg(int j);
int check(char *ptr);
void special();
void replace();

///////////////////////////////////////////////////////////
main(void)
{


	int j;
	init_once;
	for(;;)
	{
		init_command();
		if(get_comln())
		{
			replace();
			if(j=get_simcom())
			{
				special();
				execute(j);			
			}
		}

	}
	return 0;
}

//////////////////////////////////////////////////////////////
void init_once()
{
	printf("welcome to ZN's shell :)\n");
}

//////////////////////////////////////////////////////////////
void init_command()
{
	int k;
	background=FALSE;
	inputlnptr=inputln;
	avptr=avline;
	reptr=re;//
	infile[0]='\0';
	outfile[0]='\0';	
	append=FALSE;
	for(k=0;k<PIPELINE;++k)
	{
		cmdlin[k].infd=0;
		cmdlin[k].outfd=1;
	}
	for(k=3;k<=OPEN_MAX;k++)  
		close(k);
	getcwd(list_now ,PATHLN);//print rout
	printf("\n[now is in %s]enter command: # ",list_now);
	fflush(stdout);
}

////////////////////////////////////////////////////////
int get_comln()
{
	int i;
	memset((void*)inputln,0,MAXINPUTLN);
	//gets(inputln);
	fgets(inputln,MAXINPUTLN,stdin);
	if(inputln[MAXINPUTLN]!=0)
	{
		fprintf(stderr,"Command line too long\n");
		return(ERROR);
	}

	inputln[strlen(inputln)]='\n';
	return (OK);
}

/////////////////////////////////////////////////////////////
void replace()
{//	printf("%d  %s\n",strlen(inputln),inputln);
	//put '' to buffer
	char *ptr = inputlnptr;
	while(*ptr!='`'&&*ptr!='\n')
		ptr++;
	if(*ptr!='`')
		return ;
	char *first_ptr=ptr;

	ptr++;
	while(*ptr!='`'&&*ptr!='\n')
		*reptr++ = *ptr++;
	if(*ptr!='`')
		return ;
	char *second_ptr=ptr;
	
	*reptr++ = '>';
	*reptr++ = 'p';
	*reptr++ = '.';
	*reptr++ = 't';
	*reptr++ = 'x';
	*reptr++ = 't';
	*reptr++ = '\n';
	//	printf("%d  %s\n",strlen(inputln),inputln);//	printf("%d  %s\n",strlen(re),re);
	//do
	inputlnptr=re;
	int jj;//	printf("%d  %s\n",strlen(inputlnptr),inputlnptr);
	if(jj=get_simcom())
		execute(jj);

	//replace `` with file
   	FILE *stream;
   	char buffer[81];
  	 int  i, ch;

  	 /* Open file to read line from: */
  	 if( (stream = fopen( "p.txt", "r" )) == NULL )
   	   exit( 0 );

  	 /* Read in first 80 characters and place them in "buffer": */
  	 ch = fgetc( stream );
 	  for( i=0; (i < 80 ) && ( feof( stream ) == 0 ); i++ )
  	 {
  	    buffer[i] = (char)ch;
  	    ch = fgetc( stream );
  	 }

  		 /* Add null to end string */
   	buffer[i-1] = '\0';		//because the has palce a '\n' here
  	 
   	fclose( stream );

	
   	second_ptr++;//	printf( "%d  %d%s", i,strlen(buffer),buffer );//	printf( "%d%s", strlen(second_ptr),second_ptr );
  	 strcat(buffer,second_ptr);//	printf( "%s", buffer );
	*first_ptr='\0';
  	 strcat(inputln,buffer);
//	printf( "%s\n", inputln );

	//    inital here	int k;
	background=FALSE;
	inputlnptr=inputln;
	avptr=avline;
	reptr=re;//
	infile[0]='\0';
	outfile[0]='\0';
	
	append=FALSE;
	for(k=0;k<PIPELINE;++k)
	{
		cmdlin[k].infd=0;
		cmdlin[k].outfd=1;
	}
	for(k=3;k<=OPEN_MAX;k++)  
		close(k);
	fflush(stdout);
}

/////////////////////////////////////////////////
void get_simarg(int j)
{
	int i,tag,inword;
	for(i=0;i<MAXARG-1;i++)
	{
		while(*inputlnptr==' '||*inputlnptr=='\t')
	
			++inputlnptr;
		cmdlin[j].av[i]=avptr;
		cmdlin[j].av[i+1]=NULL;
		for(tag=0;tag==0;)
		{
			switch(*inputlnptr)
			{
			case ' ':
			case '\t':
				inword=FALSE;
				*avptr++='\0';
				tag=1;
				break;
			case '|':
			case '>':
			case '\n':
			case '<':
			case '&':
				if(inword==FALSE)
					cmdlin[j].av[i]=NULL;
				*avptr++='\0';
				return ;		////////////////////
			default:
				inword=TRUE;
				*avptr++=*inputlnptr++;
				break;
			}
		}
	}
}

////////////////////////////////////////////////////////
int get_simcom()
{
	int i;
	get_simarg(0);
	if(check("<"))
		get_word(infile);
	for(i=1;i<PIPELINE;i++)
		if(check("|"))
			get_simarg(i);
		else 
			break;
	if(check(">"))
	{
		if(check(">"))
			append=TRUE;
		get_word(outfile);
	}
	if(check("&"))
		background=TRUE;
	if(check("\n"))
		return(i);
	else
	{
		fprintf(stderr,"Command line syntax error\n");
		return (ERROR);
	}
}


//////////////////////////////////////////////////////////////
int check(char *ptr)
{
	char *tptr;
	while(*inputlnptr==' ')
		inputlnptr++;
	tptr=inputlnptr;
	while(*ptr!='\0'&& *ptr==*tptr)

	{
		ptr++;
		tptr++;
	}
	if(*ptr=='\0')
	{
		inputlnptr=tptr;
		return (TRUE);
	}
	else
	return (FALSE);
}

/////////////////////////////////////////////////
void get_word(char *name)
{
	int i;
	for (i=0;i<MAXNAME;i++)
	{
		switch(*inputlnptr)
		{
			case ' ':
			case '|':
			case '>':
			case '\n':
			case '<':
			case '&':
			case '\t':
				*name='\0';
				return;
			default:
				*name++=*inputlnptr++;
				break;
		}
	}
	*name='\0';
}

////////////////////////////////////////////////////////
void special()
{
	if(strcmp(cmdlin[0].av[0],"quit")==0 || strcmp(cmdlin[0].av[0],"exit")==0) 

	{
		printf("thanks for your using:)\n");
		exit(0);
	}

	if(strcmp(cmdlin[0].av[0],"cd")==0)
	{
		if(cmdlin[0].av[1]!="..")	
			chdir(cmdlin[0].av[1]);		
	}
}

//////////////////////////////////////////////////////////
void  execute(int j)
{
	int i,fd,fds[2];
	if(strcmp(cmdlin[0].av[0],"cd")==0)
	{
//		printf("%s\n",cmdlin[0].av[1]);
		if(cmdlin[0].av[1]!=NULL)
			chdir(cmdlin[0].av[1]);
		else
			chdir("cd ..");/////////////////////////////////////////////////////
	}
	if(infile[0]!='\0')
		cmdlin[0].infd=open(infile,O_RDONLY);
	if(outfile[0]!='\0')
		if(append==FALSE)
			cmdlin[j-1].outfd=open(outfile,O_WRONLY|O_CREAT|O_TRUNC,0666);
		else
			cmdlin[j-1].outfd=open(outfile,O_WRONLY|O_CREAT|O_APPEND,0666);
	if(background)
		signal(SIGCHLD,SIG_IGN);
	else
		signal(SIGCHLD,SIG_DFL);
	for(i=0;i<j;i++)
	{
		if(i<j-1)
		{
			pipe(fds);
			cmdlin[i+1].infd=fds[0];	
			cmdlin[i].outfd=fds[1];
		}
		run_com(&cmdlin[i]);
		if(fd=cmdlin[i].infd)
			close(fd);
		if((fd=cmdlin[i].outfd)!=1)
			close(fd);
	}
	if(background==FALSE)
	while(wait(NULL)!=lastpid);
}

//////////////////////////////////////////////////////////////////
void run_com(struct cmd * ptr)
{
	int k,pid;
	if(pid=fork())
	{
		if(background==TRUE)
		printf("%d\n",pid);
		lastpid=pid;
	}
	else 
	{
		if(ptr->infd==0 && background==TRUE)
		ptr->infd = open("/dev/null",O_RDONLY);
		if(ptr->infd!=0)
		{
			close(0);
			dup(ptr->infd);
		}
		if(ptr->outfd!=1)
		{
			close(1);
			dup(ptr->outfd);
		}
		if(background==FALSE)
		{
			signal(SIGINT,SIG_DFL);
			signal(SIGQUIT,SIG_DFL);
		}
		for(k=3;k<OPEN_MAX;k++)
			close(k);
		execvp(ptr->av[0],ptr->av);
		exit(1);
	}
}










 





?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品日韩一区二区三区| 午夜视频一区在线观看| 一区二区三区精密机械公司| 奇米精品一区二区三区四区 | 亚洲mv在线观看| 国产高清不卡二三区| 欧美三级电影网站| 亚洲国产成人午夜在线一区| 免费欧美在线视频| 欧美视频在线不卡| 亚洲视频一二三| 国产乱妇无码大片在线观看| 日韩午夜在线观看| 亚洲福利一区二区| 91成人免费网站| 国产精品久久久久久久岛一牛影视| 日韩av二区在线播放| 91成人在线免费观看| 综合精品久久久| 成人免费av网站| 国产日韩精品一区| 国产在线国偷精品免费看| 91精品国产综合久久精品| 亚洲成人在线免费| 欧美日韩一区二区三区免费看 | 欧美精品一区二区三区高清aⅴ| 亚洲aⅴ怡春院| 欧美日韩亚洲综合在线| 亚洲一区二区偷拍精品| 日本精品一级二级| 一区二区三区在线观看动漫| 91丨porny丨蝌蚪视频| 国产精品麻豆99久久久久久| 国产黄人亚洲片| 国产精品久久久久天堂| 成人av电影免费在线播放| 国产人久久人人人人爽| 成人黄色免费短视频| 日本一区二区成人在线| voyeur盗摄精品| 亚洲精品伦理在线| 欧美日韩黄视频| 日韩高清在线不卡| 精品久久久久久综合日本欧美| 麻豆精品视频在线观看| 国产亚洲欧美中文| 99精品国产热久久91蜜凸| 一区二区三区在线视频观看58 | 一区二区三区久久| 欧美日韩国产高清一区二区三区| 日韩国产欧美在线视频| 亚洲精品一区二区三区蜜桃下载 | 4438成人网| 久久国产精品72免费观看| 国产日韩精品一区| 91麻豆自制传媒国产之光| 亚洲h动漫在线| 久久嫩草精品久久久精品一| 99久久免费精品高清特色大片| 亚洲精品老司机| 日韩欧美的一区二区| 成人激情开心网| 亚洲一卡二卡三卡四卡| 精品国产三级电影在线观看| 99久久精品免费看国产免费软件| 亚洲一区二区三区在线看| 日韩精品资源二区在线| eeuss国产一区二区三区| 婷婷六月综合网| 久久久久国产精品人| 欧美性欧美巨大黑白大战| 久久精品国产网站| 亚洲欧洲中文日韩久久av乱码| 91精品国产91久久久久久一区二区| 国产精品一区二区三区乱码| 亚洲图片欧美视频| 国产午夜亚洲精品理论片色戒| 色综合久久66| 风流少妇一区二区| 日韩国产在线观看一区| **网站欧美大片在线观看| 日韩一级片在线播放| 色综合一区二区| 国产一区二区三区| 午夜欧美大尺度福利影院在线看| 亚洲国产精品二十页| 欧美一级精品大片| 91成人在线免费观看| 国产98色在线|日韩| 久久精品二区亚洲w码| 亚洲午夜久久久久久久久久久| 国产三级一区二区| 欧美r级电影在线观看| 欧美亚洲高清一区| 99精品黄色片免费大全| 国产成人精品1024| 精品一区二区三区在线观看 | 久久先锋影音av| 69堂精品视频| 欧美亚洲国产一卡| 91免费视频观看| 成人黄色小视频| 国产精品123| 国产激情一区二区三区| 精品一区二区三区免费播放| 日韩国产欧美视频| 天使萌一区二区三区免费观看| 一区二区在线看| 亚洲精品成人在线| 日韩毛片一二三区| 中文字幕日韩精品一区| 中文字幕一区二区三区乱码在线| 国产视频一区二区在线观看| 精品福利视频一区二区三区| 日韩精品一区二区三区中文不卡 | 国产精品一二三区在线| 国产综合色在线| 韩国v欧美v日本v亚洲v| 另类中文字幕网| 国内一区二区视频| 国产精品18久久久久久久久久久久 | 一个色妞综合视频在线观看| 亚洲欧美视频在线观看| 亚洲精品免费在线| 香蕉加勒比综合久久| 日韩高清国产一区在线| 蜜桃视频在线一区| 国产一区二区三区精品欧美日韩一区二区三区 | 欧美视频一区在线| 717成人午夜免费福利电影| 欧美一区二区久久| 精品福利在线导航| 国产精品免费视频一区| 亚洲精品菠萝久久久久久久| 亚洲高清视频中文字幕| 日本aⅴ免费视频一区二区三区| 麻豆精品一区二区av白丝在线| 国产一区二区三区四区五区美女 | 日本一区二区三区久久久久久久久不| 久久午夜国产精品| 亚洲欧美一区二区不卡| 日本伊人色综合网| 国产69精品一区二区亚洲孕妇| 91丨porny丨中文| 91精品国产色综合久久不卡电影 | 欧美亚洲综合一区| 欧美一级理论片| 国产精品卡一卡二| 日韩高清不卡在线| 成人动漫精品一区二区| 在线播放一区二区三区| 国产午夜精品久久| 亚洲成av人片在线| 豆国产96在线|亚洲| 欧美丝袜丝nylons| 国产日产精品1区| 日韩影院精彩在线| 91在线丨porny丨国产| 欧美一卡2卡三卡4卡5免费| 国产精品视频一区二区三区不卡| 亚洲欧美二区三区| 精品亚洲aⅴ乱码一区二区三区| 91影院在线免费观看| 日韩欧美高清dvd碟片| 亚洲一区二区三区中文字幕| 国产精品一区二区在线观看不卡 | 91精品国产全国免费观看| 国产精品亲子乱子伦xxxx裸| 天天色综合成人网| 91在线播放网址| 久久精品亚洲一区二区三区浴池 | 欧美精品久久一区二区三区| 中文字幕成人av| 国产一区二区三区免费看 | 亚洲国产va精品久久久不卡综合| 国产精品一二三区| 日韩视频免费直播| 亚洲高清免费观看| 色哟哟国产精品| 国产精品对白交换视频| 国产伦精品一区二区三区免费| 欧美日韩国产小视频在线观看| 中文字幕一区二区三区四区 | 国产三级一区二区| 久久成人免费电影| 欧美一区二区三区四区在线观看| 亚洲免费毛片网站| 91免费看片在线观看| 国产精品看片你懂得| 国产不卡视频一区| 国产日韩欧美一区二区三区乱码| 麻豆一区二区三| 欧美sm极限捆绑bd| 久久精品噜噜噜成人88aⅴ| 欧美日高清视频| 日本亚洲最大的色成网站www| 欧美日韩一区二区三区免费看 | 奇米777欧美一区二区| 911精品国产一区二区在线| 亚洲国产精品久久一线不卡|