コード例 #1
0
ファイル: catgrepmore.c プロジェクト: eugsokolov/OS
int main(int argc, char *argv[]){

	int i;

	if(argc < 3){
		fprintf(stderr, "Too few arguments");
		exit(EXIT_FAILURE);
	}
		
	signal(SIGINT,int_handler);
	signal(SIGPIPE,pipe_handler);

	pattern = argv[1];

	for(i = 2; i < argc; i++){
		filesread++;		
		execfunc(argv[i]);
	}

	fprintf(stdout, "Reached end of files\n");
	fprintf(stdout, "Files read: %d\n", filesread);
	fprintf(stdout, "Bytes processed: %d\n", bytesread);
	fprintf(stdout, "Exit\n");
		
	return 0;
}
コード例 #2
0
ファイル: simple.c プロジェクト: chrislusf/push
void
Xsimple(void)
{
	word *a;
	thread *p = runq;
	var *v;
	struct builtin *bp;
	int pid;
	globlist();
	a = runq->argv->words;
	if(a==0){
		Xerror1("empty argument list");
		return;
	}
	if(flag['x'])
		pfmt(err, "%v\n", p->argv->words); /* wrong, should do redirs */
	v = gvlook(a->word);
	if(v->fn)
		execfunc(v);
	else{
		if(strcmp(a->word, "builtin")==0){
			if(count(a)==1){
				pfmt(err, "builtin: empty argument list\n");
				setstatus("empty arg list");
				poplist();
				return;
			}
			a = a->next;
			popword();
		}
		for(bp = Builtin;bp->name;bp++)
			if(strcmp(a->word, bp->name)==0){
				(*bp->fnc)();
				return;
			}
		if(exitnext()){
			/* fork and wait is redundant */
			pushword("exec");
			execexec();
			Xexit();
		}
		else{
			flush(err);
			Updenv();	/* necessary so changes don't go out again */
			if((pid = execforkexec()) < 0){
				Xerror("try again");
				return;
			}

			/* interrupts don't get us out */
			poplist();
			while(Waitfor(pid, 1) < 0)
				;
		}
	}
}
コード例 #3
0
ファイル: terminal.c プロジェクト: freexyz/d2console
/* parse and execute a string */
void execcmd(void)
{
	char	*resid;
	char	*p = cmd_buf;

	while (*p) {
		memset(argv, 0, sizeof(argv));
		parseargs(p, &argc, argv, &resid);
		/* execute a function */
		if (argc > 0) {
			execfunc(argc, (const char **) argv);
		}
		p = resid;
	}
}