diff --git a/src/Integrated.c b/src/Integrated.c index f72b4ff..2e99e9d 100755 --- a/src/Integrated.c +++ b/src/Integrated.c @@ -179,6 +179,7 @@ int ExecPipe(CommandStruct* commandParent, CommandStruct* commandChild, int* pip int pipeLocation = 0; int startArgc = 0; int endArgc = commandParent->argc; + pipe(pipefd); for (int i = 0; i < pipeAmount; i++) { @@ -190,24 +191,27 @@ int ExecPipe(CommandStruct* commandParent, CommandStruct* commandChild, int* pip // if (pipeLocation < 0) // endArgc = commandParent->argc; CopyCommandStruct(commandParent, commandChild, startArgc, endArgc); - pipe(pipefd); forkPID = fork(); if (forkPID == 0) return forkPID; // if (forkPID != 0) - wait(&forkPID); + close(pipefd[0]); close(pipefd[1]); - while (read(pipefd[0], buffer, sizeof(buffer)) != 0) - printf("%s", buffer); + wait(&forkPID); startArgc = pipeLocation + 1; ResetCommandStruct(commandChild); // Clean command + pipe(pipefd); } endArgc = commandParent->argc; forkPID = fork(); CopyCommandStruct(commandParent, commandChild, startArgc, endArgc); if (forkPID == 0) return forkPID; + close(pipefd[1]); wait(&forkPID); + while (read(pipefd[0], buffer, sizeof(buffer)) != 0) + printf("%s", buffer); + close(pipefd[0]); ResetCommandStruct(commandChild); // Clean command return 1; } diff --git a/src/Pish.c b/src/Pish.c index 2c9f7fd..b864c1c 100644 --- a/src/Pish.c +++ b/src/Pish.c @@ -1,5 +1,6 @@ #include #include +#include #include #include #include @@ -27,6 +28,9 @@ void Pish(void) CommandStruct* commandChild = &commandChildObject; char inputString[1000]; // Max 1000 characters int forkPID; + signal(SIGINT, SIG_IGN); + signal(SIGQUIT, SIG_IGN); + signal(SIGTERM, SIG_IGN); ReadPishrc(commandParent, commandChild, inputString); while (1) { @@ -34,6 +38,8 @@ void Pish(void) ResetCommandStruct(commandParent); // Clean command strcpy(inputString, ""); // Clean inputString GetInput(inputString); + if (strcmp(inputString, "") == 0) + continue; SplitInput(inputString, commandParent); if (IntegratedCheck(commandParent)) continue; @@ -58,7 +64,7 @@ void ReadPishrc(CommandStruct *commandParent, CommandStruct *commandChild, char int *argc = &(commandParent->argc); char* pishLocation = GetHomeDir(); strcat(pishLocation, "/.pishrc"); - int fd = open(pishLocation, O_RDONLY | O_CREAT); + int fd = open(pishLocation, O_RDONLY | O_CREAT, 0644); assert(fd > -1); while (read(fd, buffer, 1) > 0) {