📄 shell.c
字号:
#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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -