From db08c46b1c8992168dd9004ea5d2581889ccc3b1 Mon Sep 17 00:00:00 2001 From: Nicholas Pease Date: Fri, 7 Mar 2025 04:09:55 +0000 Subject: [PATCH] Final --- .devcontainer/devcontainer.json | 22 +++++++++++ COS331-HW2-PEASE.zip | Bin 0 -> 4863 bytes COS331-HW2-PEASE/README.md | 7 ++++ COS331-HW2-PEASE/a.out | Bin 0 -> 16432 bytes COS331-HW2-PEASE/hw.c | 68 ++++++++++++++++++++++++++++++++ README.md | 7 ---- a.out | Bin 0 -> 16432 bytes b | Bin 0 -> 15960 bytes 8 files changed, 97 insertions(+), 7 deletions(-) create mode 100644 .devcontainer/devcontainer.json create mode 100644 COS331-HW2-PEASE.zip create mode 100644 COS331-HW2-PEASE/README.md create mode 100644 COS331-HW2-PEASE/a.out create mode 100644 COS331-HW2-PEASE/hw.c delete mode 100644 README.md create mode 100644 a.out create mode 100644 b diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000..b332f39 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,22 @@ +// For format details, see https://aka.ms/devcontainer.json. For config options, see the +// README at: https://github.com/devcontainers/templates/tree/main/src/ubuntu +{ + "name": "Ubuntu", + // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile + "image": "mcr.microsoft.com/devcontainers/base:jammy" + + // Features to add to the dev container. More info: https://containers.dev/features. + // "features": {}, + + // Use 'forwardPorts' to make a list of ports inside the container available locally. + // "forwardPorts": [], + + // Use 'postCreateCommand' to run commands after the container is created. + // "postCreateCommand": "uname -a", + + // Configure tool-specific properties. + // "customizations": {}, + + // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root. + // "remoteUser": "root" +} diff --git a/COS331-HW2-PEASE.zip b/COS331-HW2-PEASE.zip new file mode 100644 index 0000000000000000000000000000000000000000..e1c4139fc7f0af778fd9b0e57d9343cedff68435 GIT binary patch literal 4863 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 literal 0 HcmV?d00001 diff --git a/COS331-HW2-PEASE/README.md b/COS331-HW2-PEASE/README.md new file mode 100644 index 0000000..7c940cc --- /dev/null +++ b/COS331-HW2-PEASE/README.md @@ -0,0 +1,7 @@ +## cos331-hw2 ## +# Nicholas Pease # +# All work is my own # + +Attached is my HW2 code. One note, nowhere in the homework specifications does it call for this assignment being an "infinite loop", so as a result this program will attempt one execution and finish. If the intent was for it to run continously, uncommenting the lines 15,16 and 67 will restore this functionality. + +This program takes the complete filepath of a program and up to three parameters for that program, and attempts to execute it in a new thread. If it fails, it will print out an error message indicating this and exit. If it succeeds, it will run the program and exit both the new thread and the source thread. \ No newline at end of file diff --git a/COS331-HW2-PEASE/a.out b/COS331-HW2-PEASE/a.out new file mode 100644 index 0000000000000000000000000000000000000000..38e7f9873e5d5341220afaa952dfb43b37535dec GIT binary patch literal 16432 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 literal 0 HcmV?d00001 diff --git a/COS331-HW2-PEASE/hw.c b/COS331-HW2-PEASE/hw.c new file mode 100644 index 0000000..edf3ad9 --- /dev/null +++ b/COS331-HW2-PEASE/hw.c @@ -0,0 +1,68 @@ +// HW2 - COS331 +// Nicholas Pease +// 03/06/2025 +#include +#include +#include +#include +#define COMMAND_LENGTH 80 + +const char *terminal_line = "$ "; + +int main(int argc, char *argv[]) +{ + char *command = malloc(COMMAND_LENGTH); + // while (1) + // { + write(0, terminal_line, sizeof terminal_line); // write to terminal + read(0, command, COMMAND_LENGTH); // read from terminal + + char *args[5] = { '\0', '\0', '\0', '\0', '\0' }; // 3 arguments + one program name + NULL + + args[0] = command; + int start_vector = 1; + + while (*command != '\n') { + if (*command == ' ') { + *command = '\0'; + args[start_vector] = command + 1; + start_vector++; + } + command++; + } + *command = '\0'; // For newline + + int ret = fork(); // Fork + if (ret) { + wait(NULL); + // continue on the loop + } else { + printf("Getting ready to execute program %s", args[0]); + + switch (start_vector) { + case 1: // No parameters just filename + printf("\n"); + break; + + case 2: // one parameter, no need to loop since commas wont work + printf(" with parameter %s.\n", args[1]); + break; + + default: // multiple parameters + printf(" with parameters: "); + for (int i = 1; i < start_vector - 1; i++) { + printf("%s, ", args[i]); + } + printf("%s.\n", args[start_vector - 1]); + break; + } + + execv(args[0], args); + + // Errored out + printf("Program %s failed to launch. Please ensure the file exists and try again.\n", args[0]); + perror("Failed"); // if fails bomb out and print error + exit(0); + } + // } +} \ No newline at end of file diff --git a/README.md b/README.md deleted file mode 100644 index a7cda33..0000000 --- a/README.md +++ /dev/null @@ -1,7 +0,0 @@ -## cos331-hw2 ## - -[![](https://gitea-actions.nicholaspease.com/actions/umaine-npease/cos331-hw2/badge?label=build&style=flat&branch=main)](https://gitea-actions.nicholaspease.com/latest-log?branch=main) -[![](https://drone.nicholaspease.com/api/badges/umaine-npease/cos331-hw2/status.svg)](https://drone.nicholaspease.com/umaine-npease/cos331-hw2) -[![](https://wakaapi.nicholaspease.com/api/badge/LAX18/interval:any/project:cos331-hw2)](https://wakaapi.nicholaspease.com/summary?interval=any&project=cos331-hw2) -![](https://server1.nicholaspease.com/badges/cloc/npease/cos331-hw2.svg) -
diff --git a/a.out b/a.out new file mode 100644 index 0000000000000000000000000000000000000000..38e7f9873e5d5341220afaa952dfb43b37535dec GIT binary patch literal 16432 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 literal 0 HcmV?d00001 diff --git a/b b/b new file mode 100644 index 0000000000000000000000000000000000000000..105cf569c5273508fc0e5d1962e37e8fd3cc324d GIT binary patch literal 15960 zcmeHOTWlOx89uwYIc*Ye(uC#$$xu?%5P4!JjuldctS{?~quk>Nkbv>nyS7)_i`ku} zb`^rF6olnQ4Lm@Bf(j3`5+L<~2lIqW)3il^5>-g4Dx?q*l&S%o6siCr%m1JAf9vtE zP9)#~q&d>gcmB)wpELiQ**&v!&KFV#y5q5!LRp|brdaAr7)??P&$LN}AgOk#<#gPn zHmb!WFVs3?PZ}VrDVO4Nu|f0;2${E*D|PVwMy-J8AtUqVE01u8r~s9m2lE!OLF6!A zlm>vX*V?m~OvTd28m<-|Fv#PsOf?z*sXcS?6OxxcLGV~)-fO~pO?bc=X%C2ea!&ZO zOY#}UX0mYshIzxn3uBj|DImAO<@i-U{qMAQM0m}X4x_@@YSapd_Kp%yF0FXn9dMbC zNqh5M2S@S`l=P}?xom%1>$Y6FDVHr&Mw>==wKcW1+U26XT{q1AvgpHOYTuy~io#5@ zPSU92<3>h2wyhRB`wv(r`Hj{YIi)$<>m$GubfhYq}2BHi^8Hh3vW#Iom1MfC&{F`(7dV@2$ z=*?|PIbWRi2nP)>yxYQ{3fYyRv-QrLE|RH{=;m!`Sx$C)#_Q6$@(L0?NZuK zawRCY{Gn&!;%A(RE6(ZP%^c}XwM@6X?wr~4bBa=3bDTW?JZLv=dQ!JX`Z3ZtXBL$h zK6=YvLtSg*I(2Pn^>X8;adv!JkoTmP7sfhX-$0ox-(I^Jej&aah}fP*%ch|)hX`xwYTn6tFNYRbN!vx$<%G< z8RyLES6Fl=Q_6CNR4ccWUJCgj5JKDopm zKc-@%iP(l^OB&A7i!IjkJN`=)>%;8OwM4&a+e}q%XPopFp<0pXUa@w6V7Wuh}3+#WnQ!TRmqAU``+QRXLtesttdP(g3?8xP51L}UkwSsE|0YXz# zvK|p@9pTT%KKU&183*v1Q8Ge7Sn)9Q)Y8AbF)#qzT zJbL4+W#pY6C$*dq`(H)Ic}V#G8elzmIAC+|AvkQji;Q)r`#L*!TaTRRuN3@>)zV_O z+RaTZ6)m=$+P>XxZrvj4y96T>=VhU~Q4M=>-eY8WN)lsd(0MVB z_0u6eughgU?h6ui>7ipxtyhVpk#XI4m32(LPhp%Jt5PSa!f|T%nHavT{nymi`NIEs zs?_WMeCPE89cQ&ld=L?4v0j{?X#WRQ_`3g0(;ld;qeqlqYyY*i`v>}Ws8Vk|cLOEF zf>QvywVu8$k^v=EHsHdQimz1oo`JrF^$-HsC2_*>kCNUB_@UZI`jzo@ z3gZ>}JnOjyA<5T}I!XEjUH7#~cpBVK`c-7>)5(@ARD%iyLQ zu{vGHl)LZ1;g0qL?&0q4$EgWF#&3s>()a9!G3fRp4s2X!|R z%-z;7w>z9YrR?%p-uLp*-Dw5#{{X34XQ(itx!3>>JtZW*g{NFR~i2n?E zK0~(@eTSP8-e-pSjF`1A>Wm+v56>aMpKm`E`*Oj&!AMH+cDW!wyswJ?-wqahUqQ#e zS3y30FM$>u1;hN0lm0!LgP{MIrvcGE_I`x>?-8HpXy9WW2Yf-=S4?o~3vhth_GUjc-X5okXFKTs$D%@r8 zF^>dJizC_(pa0i|-ywdOmjaO|=5syF|1Rk`Cx~DBU69`g%-6|9m+CA=C6 z4}hN?;PWAVQVc-&&BuQ+#6Kbg;Jx@}zB7CNeL?_wp#c+)_tQ}On2!MQJcRy-^Y@DI zas8Dgo`SRxbWRELe@RyEBKXagaR;^Mbm zp7XE|GVBi-c!Ri&0Y2u((@mtL0zV_o%FzFV3_NzxKIX01*NXkCeE)F)57*Jmk7xOK z4xHL%{2c?eBly6@lswKK+E+<&Z8nH@L|bbg@-iZGEbuYEO9&tBz@OU+mX*@JxYtbJ zZ>?!e1^ggl>;zqt60lD?_5m`|thd&Ge6K7e9r_;RKgSP9RNh2GM%1~Is)m(xtj8bQ KX}s3oga1$F%K@qY literal 0 HcmV?d00001