From 0db80ffa817448dfb8cb13f1c00ee9a09a6d0a08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?No=C3=A9=20Benjam=C3=ADn=20Rosales=20Medina?= <145573317+NoeRosales22@users.noreply.github.com> Date: Wed, 11 Oct 2023 08:44:01 -0600 Subject: [PATCH 1/4] A00227290_tarea1 Tarea 1.5 Simple Terminal (fork/exec) --- labs/03/myTerminal.c | 1 + 1 file changed, 1 insertion(+) create mode 100644 labs/03/myTerminal.c diff --git a/labs/03/myTerminal.c b/labs/03/myTerminal.c new file mode 100644 index 00000000..003913da --- /dev/null +++ b/labs/03/myTerminal.c @@ -0,0 +1 @@ +// Tarea From 0697b9d7861eac3d8421b66456b78bff421d25d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?No=C3=A9=20Benjam=C3=ADn=20Rosales=20Medina?= <145573317+NoeRosales22@users.noreply.github.com> Date: Thu, 19 Oct 2023 09:30:21 -0600 Subject: [PATCH 2/4] Update myTerminal.c --- labs/03/myTerminal.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/labs/03/myTerminal.c b/labs/03/myTerminal.c index 003913da..b7985e93 100644 --- a/labs/03/myTerminal.c +++ b/labs/03/myTerminal.c @@ -1 +1,44 @@ // Tarea + +#include +#include +#include +#include +#include +#include +#include +int main(){ + char instruction[100]; + char stop[] = "stop"; + char ls[] = "ls"; + char date[] = "date"; + char pwd[] = "pwd"; + pid_t pid; + while(strcmp(instruction, stop) != 0){ + printf("nbrm> "); + scanf("%s", instruction); + if(strcmp(instruction, date) == 0 || strcmp(instruction, ls) == 0 || strcmp(instruction, pwd) == 0){ + pid = fork(); + if(pid < 0){ + fprintf(stderr, "Fork Failed"); + exit(-1); + } + else if (pid == 0 && strcmp(instruction, ls) == 0){ + execlp("/bin/ls","ls",NULL); + } + else if (pid == 0 && strcmp(instruction, date) == 0){ + execlp("/bin/date","date",NULL); + } + else if (pid == 0 && strcmp(instruction, pwd) == 0){ + execlp("/bin/pwd","pwd",NULL); + } + else{ + wait(NULL); + } + } + else if (strcmp(instruction, stop) != 0){ + printf("nbrm> Wrong command, stop to exit the terminal\n"); + } + } + return 0; +} From 9c42031dede8a598934003be5186c465020c1aae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?No=C3=A9=20Benjam=C3=ADn=20Rosales=20Medina?= <145573317+NoeRosales22@users.noreply.github.com> Date: Thu, 19 Oct 2023 11:17:00 -0600 Subject: [PATCH 3/4] Update myTerminal.c --- labs/03/myTerminal.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/labs/03/myTerminal.c b/labs/03/myTerminal.c index b7985e93..8b26ee69 100644 --- a/labs/03/myTerminal.c +++ b/labs/03/myTerminal.c @@ -1,4 +1,6 @@ -// Tarea +/* + +*/ #include #include From 3788bf48bcf02395bc95d44f86746f6641c65b8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?No=C3=A9=20Benjam=C3=ADn=20Rosales=20Medina?= <145573317+NoeRosales22@users.noreply.github.com> Date: Thu, 19 Oct 2023 11:24:36 -0600 Subject: [PATCH 4/4] Update myTerminal.c --- labs/03/myTerminal.c | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/labs/03/myTerminal.c b/labs/03/myTerminal.c index 8b26ee69..292c02de 100644 --- a/labs/03/myTerminal.c +++ b/labs/03/myTerminal.c @@ -1,5 +1,8 @@ /* - +Noé Benjamín Rosales Medina +A00227290 +Tarea 1.5 Simple Terminal (fork/exec) +19/10/2023 */ #include @@ -9,36 +12,46 @@ #include #include #include + int main(){ - char instruction[100]; + // Variables declaration + char command[100]; char stop[] = "stop"; char ls[] = "ls"; char date[] = "date"; char pwd[] = "pwd"; pid_t pid; - while(strcmp(instruction, stop) != 0){ + + while(strcmp(command, stop) != 0){ printf("nbrm> "); - scanf("%s", instruction); - if(strcmp(instruction, date) == 0 || strcmp(instruction, ls) == 0 || strcmp(instruction, pwd) == 0){ + scanf("%s", command); + if(strcmp(command, date) == 0 || strcmp(command, ls) == 0 || strcmp(command, pwd) == 0){ + // Fork a child process pid = fork(); if(pid < 0){ + // Error ocurred fprintf(stderr, "Fork Failed"); exit(-1); } - else if (pid == 0 && strcmp(instruction, ls) == 0){ + else if (pid == 0 && strcmp(command, ls) == 0){ + // Child process for ls execlp("/bin/ls","ls",NULL); } - else if (pid == 0 && strcmp(instruction, date) == 0){ + else if (pid == 0 && strcmp(command, date) == 0){ + // Child process for date execlp("/bin/date","date",NULL); } - else if (pid == 0 && strcmp(instruction, pwd) == 0){ + else if (pid == 0 && strcmp(command, pwd) == 0){ + // Child process for pwd execlp("/bin/pwd","pwd",NULL); } else{ + // Parent waits for the child to complete its process wait(NULL); } } - else if (strcmp(instruction, stop) != 0){ + else if (strcmp(command, stop) != 0){ + // Any other command printf("nbrm> Wrong command, stop to exit the terminal\n"); } }