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

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? test14_2.txt

?? Linux下的C語(yǔ)言編程
?? TXT
字號(hào):
/* 頭文件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
/*輸出行的最大長(zhǎng)度*/
#define MAXARG 15
/*一個(gè)簡(jiǎn)單命令的最大數(shù)目*/
#define PIPELINE 5
/*一個(gè)管道的最大簡(jiǎn)單命令數(shù)*/
#define MAXNAME 100
/*I/O重定向文件名字的最大長(zhǎng)度*/

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

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

/*主過(guò)程main.c*/
//#include "head.h"

main(void)
{
	int j;

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

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

init_command(void)
/*每次輸入命令都要進(jìn)行初始化*/
{
	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);
}

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

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

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

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

/*得到下一個(gè)標(biāo)識(shí)符get_word.c*/
get_word(char *name)
{
	int m;

	/*從inputln[]中得到一個(gè)單詞,也就是一個(gè)標(biāo)識(shí)符*/
	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';
}

/*得到當(dāng)前命令行g(shù)et_comin.c*/
get_comln(void)
{
	int m;

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

/*執(zhí)行簡(jiǎn)單命令run_com.c*/
run_com(struct cmd *ptr)
{
	int k,pid;

	if(pid=fork( ))
		/*父進(jìn)程*/
	{
		if(background==TRUE)
			printf( "%d\n",pid);
			/*如果是后臺(tái)命令,打印出進(jìn)程標(biāo)識(shí)*/
		lastpid=pid;
			/*記錄最后一個(gè)簡(jiǎn)單命令的進(jìn)程標(biāo)志*/
	}
	else
	{
			/*如果是后臺(tái)進(jìn)程要關(guān)閉鍵盤輸入*/
		if(ptr->infd==0&&background==TRUE)
			ptr->infd=open( "/dev/null",O_RDONLY);
			/*對(duì)輸入進(jìn)行重定向*/
		if(ptr->infd!=0)
		{
			close(0);
			dup(ptr->infd);
		}
			/*對(duì)輸出進(jìn)行重定向*/
		if(ptr->outfd!=1)
		{
			close(1);
			dup(ptr->outfd);
		}

			/*前臺(tái)進(jìn)程可以接受鍵盤輸入的中斷和退出信號(hào)*/
		if(background==FALSE)
		{
			signal(SIGINT,SIG_DFL);
			signal(SIGQUIT,SIG_DFL);
		}
			/*關(guān)閉其它文件描述符,使得除了標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出和錯(cuò)誤輸出2外設(shè)置的管道和I/O重定向*/
		for(k=3;k<OPEN_MAX;++k)
			close(k);
			/*下面代碼執(zhí)行一條簡(jiǎn)單命令*/
		execvp(ptr->av[0],ptr->av);
		exit(1);
	}
}

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

	if(infile[0]!='\0')
	/*如果命令指定了輸入文件則打開(kāi)輸入文件*/
		cmdlin[0].infd=open(infile,O_RDONLY);
	if(outfile[0]!= '\0')
		/*如果命令指定了輸出文件則打開(kāi)相應(yīng)的輸出文件*/
		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);
		/*對(duì)前臺(tái)進(jìn)程和后臺(tái)進(jìn)程進(jìn)行不同的處理*/
	if(background)
		signal(SIGCHLD,SIG_IGN);
	else
		signal(SIGCHLD,SIG_DFL);
		/*循環(huán)執(zhí)行每個(gè)簡(jiǎn)單命令*/
	for(m=0;m<j;++m)
	{
			/*對(duì)管道進(jìn)行操作*/
		if(m<j-1)
		{
			pipe(fds);
			cmdlin[m+1].infd=fds[0];
			cmdlin[m].outfd=fds[1];
		}
			/*執(zhí)行一條簡(jiǎn)單命令*/
		run_com(&cmdlin[m]);
			/*關(guān)閉該命令的輸入*/
		if(fd=cmdlin[m].infd)
			close(fd);
			/*關(guān)閉該命令的輸出*/
		if((fd=cmdlin[m].outfd)!=1)
			close(fd);
	}
		/*如果不是后臺(tái)命令,等待直到最后一條簡(jiǎn)單命令執(zhí)行完畢*/
	if(background==FALSE)
		while(wait(NULL)!=lastpid);
}

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

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

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

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

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲免费av高清| 开心九九激情九九欧美日韩精美视频电影| 日本精品视频一区二区| 日韩中文字幕区一区有砖一区 | 中文字幕在线观看一区二区| 欧美优质美女网站| 经典三级视频一区| 亚洲一区二区三区四区不卡| 久久免费电影网| 欧美日韩一区二区三区四区五区| 国产乱对白刺激视频不卡| 亚洲免费色视频| 久久夜色精品一区| 欧美日本乱大交xxxxx| 福利一区在线观看| 美女精品自拍一二三四| 亚洲一区二区四区蜜桃| 国产精品视频你懂的| 日韩一区二区三| 欧美午夜精品久久久久久孕妇| 国产精品自拍网站| 日本不卡视频一二三区| 一级日本不卡的影视| 中文字幕精品一区二区精品绿巨人 | 欧美日韩免费观看一区三区| 波多野结衣中文字幕一区| 九色综合国产一区二区三区| 午夜精品福利久久久| 一区二区三区在线播放| 国产精品乱码人人做人人爱 | 久久综合久久综合亚洲| 91精品国产麻豆| 欧美日韩一区二区三区四区| 91免费在线播放| 国模少妇一区二区三区| 捆绑调教一区二区三区| 丝袜诱惑亚洲看片| 亚洲福利国产精品| 亚洲一区二区三区中文字幕| 国产欧美一区二区三区网站 | 久久午夜电影网| 日韩欧美国产高清| 91精品黄色片免费大全| 欧美日韩二区三区| 欧美日韩不卡在线| 欧美日韩国产中文| 3atv一区二区三区| 欧美一区二区美女| 欧美电影精品一区二区| 亚洲精品一区在线观看| 久久综合狠狠综合久久激情| 亚洲精品在线三区| 国产亚洲一区二区三区四区| 国产日韩欧美一区二区三区综合| 久久九九久久九九| 中国av一区二区三区| 亚洲色欲色欲www| 夜夜精品视频一区二区| 亚洲国产日韩一级| 欧美aa在线视频| 韩国一区二区在线观看| 国产·精品毛片| 99re这里只有精品首页| 色综合中文字幕国产 | 久久99精品久久久久久动态图| 久久精品二区亚洲w码| 国产综合久久久久影院| 2021国产精品久久精品| 欧美国产欧美亚州国产日韩mv天天看完整 | av在线播放成人| 色先锋久久av资源部| 日本道在线观看一区二区| 欧美伦理视频网站| 久久精品这里都是精品| 亚洲人成电影网站色mp4| 午夜久久久久久久久| 看国产成人h片视频| 成人精品国产福利| 欧美三级一区二区| 久久婷婷国产综合国色天香| 亚洲欧美二区三区| 免费久久99精品国产| 成人手机在线视频| 欧美日韩国产一区| 国产亚洲va综合人人澡精品| 亚洲久草在线视频| 九色综合国产一区二区三区| 91在线视频播放| 日韩欧美国产综合| 亚洲女同一区二区| 久久99精品久久久久| 色综合欧美在线| 欧美精品一区在线观看| 依依成人精品视频| 国产麻豆成人传媒免费观看| 91黄色免费网站| 久久久久久久久久电影| 亚洲一区二区三区美女| 国产精品影视在线观看| 欧美日韩高清不卡| 亚洲欧美在线aaa| 久久99精品国产.久久久久久| 91视频在线观看免费| 精品精品欲导航| 一二三四区精品视频| 国产成人精品免费在线| 欧美精品1区2区3区| 亚洲少妇30p| 国产乱码字幕精品高清av | 欧美最猛性xxxxx直播| 国产日韩综合av| 免费成人深夜小野草| 色久综合一二码| 亚洲国产电影在线观看| 麻豆91在线播放| 欧美丝袜自拍制服另类| 自拍偷拍欧美精品| 国产成人精品综合在线观看| 欧美一卡在线观看| 夜夜嗨av一区二区三区中文字幕 | 日韩和欧美一区二区| 色婷婷综合久久久久中文| 国产亚洲一本大道中文在线| 免费人成精品欧美精品| 欧美片在线播放| 亚洲影院在线观看| 色综合一区二区| 国产精品久久毛片av大全日韩| 欧美人伦禁忌dvd放荡欲情| 亚洲欧美电影一区二区| 成人午夜看片网址| 欧美极品aⅴ影院| 国产综合久久久久久鬼色 | 色天使久久综合网天天| 中文字幕日韩欧美一区二区三区| 国产精品亚洲成人| xvideos.蜜桃一区二区| 老司机免费视频一区二区三区| 欧美一区二区视频在线观看2022| 午夜在线成人av| 欧美性大战久久久久久久| 亚洲伊人色欲综合网| 欧美在线free| 亚洲福中文字幕伊人影院| 欧美日韩一级二级三级| 亚洲国产色一区| 欧美日韩精品电影| 青椒成人免费视频| 日韩午夜精品视频| 久久不见久久见免费视频7| 欧美mv日韩mv亚洲| 九色综合狠狠综合久久| 国产亚洲欧洲997久久综合| 国产精品18久久久久久久久| 欧美激情综合网| 色综合久久综合网| 亚洲一区精品在线| 666欧美在线视频| 久国产精品韩国三级视频| 久久嫩草精品久久久精品| 丁香婷婷深情五月亚洲| 亚洲女爱视频在线| 欧美剧情片在线观看| 美女一区二区三区在线观看| 久久久久久亚洲综合| 成人av免费在线观看| 亚洲人成伊人成综合网小说| 欧美日韩国产高清一区二区| 另类小说图片综合网| 国产女主播一区| 91亚洲男人天堂| 天堂久久久久va久久久久| 亚洲精品在线免费观看视频| 不卡的av网站| 亚洲午夜久久久| 精品对白一区国产伦| www.久久久久久久久| 午夜影视日本亚洲欧洲精品| 精品国产一区二区三区四区四| 成人午夜又粗又硬又大| 午夜精品影院在线观看| 国产亚洲成aⅴ人片在线观看| 99re热这里只有精品免费视频| 亚洲成av人影院| 亚洲国产精品ⅴa在线观看| 欧美日韩一卡二卡三卡 | 国产精品99久久久久| 亚洲黄色录像片| 久久蜜臀精品av| 欧美视频一区二区三区在线观看| 久久99国产精品成人| 亚洲视频电影在线| 精品国产制服丝袜高跟| 在线观看三级视频欧美| 国产一区二区三区香蕉| 亚洲福利电影网| 国产精品国产三级国产aⅴ入口 | 国产精品2024| 亚洲国产一区二区三区 | 欧美二区乱c少妇|