shell.c

来自「example of shell which include the comma」· C语言 代码 · 共 112 行

C
112
字号
#include <string.h>#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/types.h>#include<time.h>#include <fcntl.h>int main(int argc , char* argv[]) {char cmdline[300], cmdOrg[300];char *zaman;char *arguman[30];int t,x,i,pid;while(1){printf("BIM322Shell%% : "); //her satırda promt verdikgets(cmdline); //komut satırını aldıkstrcpy(cmdOrg, cmdline);//komut satırını cmdOrg ye kopyaladıkint tokenSize=0;i=0;arguman[i]=strtok(cmdOrg, " ");	//boşluklara göre argumanları aldık ve arguman[]dizisina atadık   while(arguman[i++]!=NULL){	++tokenSize;        arguman[i]=strtok(NULL, " ");  }		for(i=0;i<tokenSize;i++){			printf("argumen[%d]=%s\n",i, arguman[i]); //arguman diizsinin yazdırdık		}if (strlen(cmdOrg) == 0) { //komut satırına birşey girilip girilmediğini kontrol ettik	continue;	   //komut girilmiyorsa yeniden prımt verdik}if (strcmp(arguman[0], "exit")==0) { //eğer exit girildiyse program return ediyor	return 0;} if (strcmp(arguman[0], "time")==0)  { //eğer komut olarak date girildiyse     	time(&t);		//time fonksiyonu ile zaman alınıyor 	zaman= ctime(&t); 	//ctime ile stringe çevirdik	printf("%s",zaman);	//zamanı ekrana yazdık}if (strcmp(arguman[0],"cd") == 0) {  //eğer komut olarak cd girildiyse		printf("%s\n",arguman[1]);   //		int bak =chdir(arguman[1]); //chdir fonksiyonu kullanarak directory i çağırdık			if(bak==-1){ 	//bak değeri ile girilen directory nin olup olmadığını kontrol ettik				printf("not found"); //eğer bak=-1 ise directory yok demektir uyarı verdik			}			if(bak==0){   //eğer bak=0 ise yani böyle bir directory var demektir 				printf("%s",arguman[1]);  //direktoryi ekrana yazdık			}}//I/O Redirectioni=0;	while(arguman[i]!='\0')	{ 		if((strcmp(arguman[i],"<"))==0){  //eğer arguman < ise dosyadan okur			if(fork()==0){			arguman[i]=NULL;			int fd;			fd=open(arguman[i+1],O_RDONLY);			dup2(fd,0);			close(fd);			execv(arguman[0],arguman);		}				break;					}		if((strcmp(arguman[i],">"))==0){  //eğer arguman < ise dosyaya yazar dosya yoksa oluşturur			if(fork()==0){			arguman[i]=NULL;			int fd;			fd=open(arguman[i+1], O_WRONLY | O_CREAT | O_TRUNC);			dup2(fd,1);			close(fd);			execv(arguman[0],arguman);			printf("gediiii\n");			//waitpid( pid,NULL,0 );		}		break;					}			else{			i++;		}	}//end of while(arguman[i]='\0')}//end of while(1)return 0;}//end of main

⌨️ 快捷键说明

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