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

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

?? test14_2.txt

?? Linux下的C語言編程
?? TXT
字號:
/* 頭文件head.h*/
#include <stdio.h>
#include <limits.h>
#include <signal.h>
#include <fcntl.h>

#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define MAXINPUTLN 120
/*輸出行的最大長度*/
#define MAXARG 15
/*一個簡單命令的最大數(shù)目*/
#define PIPELINE 5
/*一個管道的最大簡單命令數(shù)*/
#define MAXNAME 100
/*I/O重定向文件名字的最大長度*/

char inputln[MAXINPUTLN+1];
/*用戶的輸入 */
char *inputlnptr;
/* 指向當前inputln[ ]數(shù)組的當前位置*/
char avline[MAXINPUTLN+1];
/*從inputln[ ]數(shù)組中提取出來的參數(shù)字符串 */
char *avptr;
/*指向avline[]數(shù)組中的當前位置*/
char infile[MAXINPUTLN+1];
/* 輸入重定向文件的名字*/
char outfile[MAXNAME+1];
/*輸出重定向文件的名字*/
int background;
/*為TRUE時為后臺命令(命令行以&結尾,否則為前臺,*/
int lastpid;
/*管道中最后一條簡單命令的進程標識*/
int append;
/*如果為TRUE表示命令結尾用>>來說明附加在某文件末尾*/

struct cmd
{
	char *av[MAXARG];
		/*存放命令和參數(shù)的一維數(shù)組*/
	int infd;
	int outfd;
}cmdlin[PIPELINE];
/*一個簡單命令結構*/

/*主過程main.c*/
//#include "head.h"

main(void)
{
	int j;

	init_once( );
		/*對程序進行初始化*/
	for(;;)
	{
		init_command( );
			/*每執(zhí)行一條命令都要進行一次初始化*/
		if(get_comln( ))
			/*得到命令行輸入*/
			if(j=get_simcom())
				/*分析出簡單命令的個數(shù)*/
				execute(j);
					/*執(zhí)行這j個命令*/
	}
}

/*初始化文件init.c*/
init_once(void)
{
	signal(SIGINT,SIG_IGN);
	signal(SIGQUIT,SIG_IGN);
}

init_command(void)
/*每次輸入命令都要進行初始化*/
{
	int k;
	background=FALSE;
	inputlnptr=inputln;
	avptr=avline;
	infile[0]= '\0';
	outfile[0]= '\0';
	append=FALSE;

	for(k=0;k<OPEN_MAX;++k)
	{
		cmdlin[k].infd=0;
		cmdlin[k].outfd=1;
	}
	for(k=3;k<OPEN_MAX;++k)
		close(k);
	printf("tsh:");
	fflush(stdout);
}

/*語法分析文件get_simcom.c*/
get_simcom(void)
{
	int m;

	get_simarg(0);
	/*先分析第一條簡單命令*/

	if(check( "<"))
	/*如果有輸入文件,就記錄輸入文件名*/
		get_word(infile);
	/*下面是循環(huán)分析管道中的每一條簡單命令*/
	for(m=1;m<PIPELINE;++m)
	{
		if(check("|"))
			get_simarg(m);
		else
			break;
	}
		
/*如果有輸出文件,記錄輸出文件名*/
	if(check( ">"))
	{
		if(check( ">"))
		/*輸出到某文件的末尾*/
			append=TRUE;
		get_word(outfile);
	}

		/*后臺運行命令*/
	if(check( "&"))
		background=TRUE;
		/*下面代碼分析完整個命令,返回簡單命令個數(shù)*/
	if(check( "\n"))
		return(m);
	else
		/*如果沒分析完畢,說明輸入的命令行有語法錯誤*/
	{
		fprintf(stderr, "Command line syntax error\n");
		return(ERROR);
	}
}

/*得到下一個標識符get_word.c*/
get_word(char *name)
{
	int m;

	/*從inputln[]中得到一個單詞,也就是一個標識符*/
	for(m=0;m<MAXNAME;++m)
	{
		switch(*inputlnptr)
		{
			case ' ':
			case '|':
			case '>':
			case '\n':
			case '<':
			case '&':
			case '\t':
				*name='\0';
				return;
			default:
				name=inputlnptr++;
				name++;
		}
	}
	*name= '\0';
}

/*得到當前命令行get_comin.c*/
get_comln(void)
{
	int m;

	for(m=0;(inputln[m]=getchar( ))!= '\n'&& m<MAXINPUTLN;++m);
	if(m==MAXINPUTLN)
		/*如果輸入的命令超過了最大長度,就報錯*/
	{
		fprintf(stderr, "Command line too long\n");
		return(ERROR);
	}
	inputln[m+1]='\0';
	return(OK);
}

/*執(zhí)行簡單命令run_com.c*/
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);
		}
			/*關閉其它文件描述符,使得除了標準輸入、標準輸出和錯誤輸出2外設置的管道和I/O重定向*/
		for(k=3;k<OPEN_MAX;++k)
			close(k);
			/*下面代碼執(zhí)行一條簡單命令*/
		execvp(ptr->av[0],ptr->av);
		exit(1);
	}
}

/*執(zhí)行輸入的命令的文件execute.c*/
execute(int j)
{
	int m,fd,fds[2];

	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);
		/*循環(huán)執(zhí)行每個簡單命令*/
	for(m=0;m<j;++m)
	{
			/*對管道進行操作*/
		if(m<j-1)
		{
			pipe(fds);
			cmdlin[m+1].infd=fds[0];
			cmdlin[m].outfd=fds[1];
		}
			/*執(zhí)行一條簡單命令*/
		run_com(&cmdlin[m]);
			/*關閉該命令的輸入*/
		if(fd=cmdlin[m].infd)
			close(fd);
			/*關閉該命令的輸出*/
		if((fd=cmdlin[m].outfd)!=1)
			close(fd);
	}
		/*如果不是后臺命令,等待直到最后一條簡單命令執(zhí)行完畢*/
	if(background==FALSE)
		while(wait(NULL)!=lastpid);
}

	/*分析簡單命令get_sirmarg.c*/
get_simarg(int j)
{
	int m,tag,inword;

	for(m=0;m<MAXARG-1;++m)
	{
		while(*inputlnptr== ' '||*inputlnptr== '\t')
			/*跳過空格符合Tab符*/
			++inputlnptr;

			/*在cmd數(shù)組中存放的j個量,如果j為0則為命令,否則為參數(shù)*/
		cmdlin[j].av[m]=avptr;
		cmdlin[j].av[m+1]=NULL;
		for(tag=0;tag==0;)
		{
			switch(*inputlnptr)
			{
				case ' ':
				case '\t':
					inword=FALSE;
						/*對于這兩種情況指定下一個參數(shù)*/
					*avptr++= '\0';
					tag=1;
					break;
				case '>':
				case '\n':
				case '<':
				case '&':
				case '|':
					if(inword==FALSE)
						/*對于以上幾種情況改命令結束*/
						cmdlin[j].av[m]=NULL;
					*avptr++= '\0';
					return;
				default:
					/*否則說明參數(shù)的名字還不全*/
					inword=TRUE;
					avptr=inputlnptr;
					avptr++;
					break;
			}
		}
	}
}

	/*字符串匹配check.c*/
check(char *ptr)
{
	char *tptr;
		
	while(*inputlnptr== ' ')
		/*跳過空格符*/
		inputlnptr++;
	tptr=inputlnptr;
	while(*ptr!= '\0'&&*ptr==*tptr)
		/*循環(huán)比較兩個字符串是否相等*/
	{
		ptr++;
		tptr++;
	}
	if(*ptr= '\0')
		/*比較結果相等*/
	{
		inputlnptr=tptr;
	/*修改inputlnptr指針*/
		return(TRUE);
	}
	else
	/*比較結果不相等*/
		return(FALSE);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产在线播放一区二区三区| 国产精品卡一卡二| 色呦呦网站一区| aaa亚洲精品| 成人免费高清视频在线观看| 成人性生交大片| 欧美精品色综合| 91精品国产欧美一区二区| 91精品中文字幕一区二区三区| 在线成人午夜影院| 亚洲天堂网中文字| 亚洲国产一区二区a毛片| 天堂一区二区在线免费观看| 欧美aa在线视频| 久久se这里有精品| 成人黄色软件下载| 日本大香伊一区二区三区| 欧美剧情片在线观看| 1区2区3区国产精品| 亚洲图片欧美视频| av高清久久久| 国产精品私人自拍| 亚洲成人一区二区| 国产大陆精品国产| 91精品91久久久中77777| 欧美国产成人精品| 婷婷中文字幕综合| 国产成人在线免费| 久久久久久9999| 亚洲主播在线播放| 国产成人在线免费观看| 久久久亚洲综合| 国产乱码精品一区二区三 | 久久综合九色综合久久久精品综合 | 久久精品欧美一区二区三区不卡| 中文字幕一区视频| 风间由美一区二区三区在线观看| 欧美日韩在线一区二区| 中文欧美字幕免费| 国产成人在线免费观看| 国产人伦精品一区二区| 亚洲va中文字幕| 在线观看91av| 美国欧美日韩国产在线播放| 91小宝寻花一区二区三区| 日韩一区二区三区精品视频| 亚洲视频一区二区在线观看| 色吊一区二区三区| 亚洲国产成人高清精品| 欧美大片免费久久精品三p| 夜色激情一区二区| 99久久精品情趣| 国产三级欧美三级日产三级99| 国产老女人精品毛片久久| 国产精品丝袜黑色高跟| 色噜噜狠狠色综合欧洲selulu| 亚洲成人在线网站| www成人在线观看| 99久久久免费精品国产一区二区| 亚洲一二三四在线观看| 7777女厕盗摄久久久| 国产精品中文字幕欧美| 国产精品初高中害羞小美女文| 欧美亚洲禁片免费| 亚洲激情中文1区| www.日韩在线| 亚洲成人你懂的| 国产精品久久久久久久久果冻传媒 | 午夜电影一区二区| 久久久影视传媒| 精品视频在线免费看| 国产一区二区在线看| 亚洲人成伊人成综合网小说| 国产91精品精华液一区二区三区| 亚洲女与黑人做爰| 欧美r级在线观看| 韩国av一区二区三区四区| 亚洲精品一区二区三区福利 | 欧美三级一区二区| 国产一区二区三区视频在线播放| 亚洲欧洲三级电影| 欧美成人性战久久| 日本精品一级二级| 国产一区二区三区四区五区美女| 亚洲精品国产一区二区精华液 | 91免费国产在线| 久久成人免费网站| 午夜精品在线看| 亚洲视频在线一区| 国产亚洲综合av| 日韩免费观看高清完整版| 日本韩国视频一区二区| 成人午夜免费电影| 狠狠色综合日日| 免费一区二区视频| 亚洲精品欧美二区三区中文字幕| 国产欧美日韩另类一区| 欧美一级二级在线观看| 欧美性淫爽ww久久久久无| 不卡视频一二三| 国产成人精品在线看| 黄页网站大全一区二区| 免费成人在线观看| 日韩黄色片在线观看| 亚洲一区二区三区视频在线| 国产精品超碰97尤物18| 中文字幕av一区二区三区高 | 国产亚洲婷婷免费| 欧美v亚洲v综合ⅴ国产v| 正在播放亚洲一区| 欧美手机在线视频| 欧美色欧美亚洲另类二区| 色激情天天射综合网| 色婷婷久久一区二区三区麻豆| av网站一区二区三区| 色综合久久综合中文综合网| av午夜精品一区二区三区| 99免费精品视频| fc2成人免费人成在线观看播放| 福利91精品一区二区三区| 成人性生交大片免费看在线播放| 国产成人免费高清| 成人一道本在线| 91免费版在线看| 欧美亚洲国产bt| 正在播放一区二区| 久久综合色8888| 国产亚洲精品福利| 国产精品―色哟哟| 成人欧美一区二区三区黑人麻豆 | 波多野结衣欧美| 色综合色综合色综合 | 精品免费国产二区三区| 精品国产伦理网| 国产日产欧美一区二区视频| 日韩美女精品在线| 一二三四区精品视频| 日韩电影在线一区| 一区二区三区欧美日韩| 亚洲高清免费观看| 精品午夜一区二区三区在线观看| 亚洲成人av一区二区| 日本怡春院一区二区| 国产精品一级片| 91免费视频观看| 日韩欧美国产精品一区| 日本一区二区视频在线| 亚洲狼人国产精品| 另类欧美日韩国产在线| 成人免费毛片高清视频| 欧美伦理电影网| 国产嫩草影院久久久久| 亚洲国产精品综合小说图片区| 精品在线亚洲视频| 91猫先生在线| 亚洲精品一区二区三区香蕉| 综合激情成人伊人| 久久精品99久久久| 91捆绑美女网站| 2020国产精品自拍| 亚洲国产精品久久人人爱| 精品一区二区三区免费播放| 色综合色综合色综合色综合色综合 | 亚洲v日本v欧美v久久精品| 国产在线精品一区二区不卡了| 色婷婷av一区二区三区之一色屋| 欧美一区二区三区日韩视频| 国产精品二区一区二区aⅴ污介绍| 水蜜桃久久夜色精品一区的特点| 成人影视亚洲图片在线| 日韩欧美一区二区视频| 一区二区三区资源| 成人丝袜高跟foot| 日韩亚洲欧美在线| 亚洲成年人影院| 99精品一区二区| 欧美激情一区二区三区在线| 免费日韩伦理电影| 欧美手机在线视频| 亚洲欧美日韩久久精品| 粉嫩一区二区三区在线看| 精品国产乱码久久久久久久| 偷拍与自拍一区| 精品视频在线免费看| 亚洲自拍都市欧美小说| 日本道在线观看一区二区| 国产精品久久午夜| 高清视频一区二区| 国产亚洲欧美中文| 国产一区二区视频在线| 欧美电影免费观看高清完整版在线 | 免费日本视频一区| 欧美日韩国产精选| 国产视频在线观看一区二区三区| 日韩电影免费在线看| 欧美日韩国产不卡| 午夜不卡av在线| 欧美日韩高清一区二区不卡| 亚洲综合视频在线观看| 色香蕉成人二区免费|