From aeba67799bfc129d4cb4c0d9dbb7c3652170ef2a Mon Sep 17 00:00:00 2001 From: Trevor Vallender Date: Sat, 3 Feb 2024 13:09:10 +0000 Subject: [PATCH] Add simple cat --- README.md | 4 ++++ apitue/01/ls | Bin 0 -> 16216 bytes apitue/01/ls.c | 27 +++++++++++++++++++++++++++ apitue/01/simple_cat | Bin 0 -> 16288 bytes apitue/01/simple_cat.c | 33 +++++++++++++++++++++++++++++++++ 5 files changed, 64 insertions(+) create mode 100755 apitue/01/ls create mode 100644 apitue/01/ls.c create mode 100755 apitue/01/simple_cat create mode 100644 apitue/01/simple_cat.c diff --git a/README.md b/README.md index ca19de6..e61ebf5 100644 --- a/README.md +++ b/README.md @@ -4,3 +4,7 @@ Code from programming books I work through—both sample code from the books and I write myself. ## Advanced Programming in the UNIX environment + +Working through both [the book](http://www.apuebook.com) and [this online course](https://stevens.netmeister.org/631/). + + diff --git a/apitue/01/ls b/apitue/01/ls new file mode 100755 index 0000000000000000000000000000000000000000..837c256d89f2b59136d1a10fec1ee6e5f3221ff9 GIT binary patch literal 16216 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 + +#include +#include +#include + +int main(int argc, char **argv) { + DIR *dp; + struct dirent *dirp; + + if (argc != 2) { + fprintf(stderr, "usage: %s dir_name\n", argv[0]); + exit(1); + } + + if ((dp = opendir(argv[1])) == NULL) { + fprintf(stderr, "can't open '%s'\n", argv[1]); + exit(1); + } + + while ((dirp = readdir(dp)) != NULL) { + printf("%s\n", dirp->d_name); + } + + closedir(dp); + return(EXIT_SUCCESS); +} diff --git a/apitue/01/simple_cat b/apitue/01/simple_cat new file mode 100755 index 0000000000000000000000000000000000000000..26d76419eb847b6ae006b0a4f5d8e0c46a08bfd7 GIT binary patch literal 16288 zcmeHOZ)_CD6`!*Wm;|s*O!?QqmH;J1UTiQF)3_Y?4{Kz=1-ntzB%AZy*}ihVyWZ`A zjaqV)P;qjs8dYhinh#081gZT%+oTGW5QY>dX_UxBs!CK+k*GwrN*m**t=lSG-27SJelW7#ZcoEt5KVsCSd9)KjLtaB&B+>R7AG5BNO?I!$Z@D*+-ZtCO>vA<)E*<} z6LW&cRyq$i)`AU%(H+-Eac*o@VS*9cKsj*33Vo9HIw-DIlhp_})+<^ta(iEbILym` zDtwvuQ+vg(!vN)>Ni9~HPJ{cJy0{SbxX~bdOa1_H_9$xzce^-Ozqm+ zC7_y7kd2dYS6Z?%Z=!1gw@en~B z%k$tsADIu|F(`==_LjFGBR~7Kz3|y61CN#e?@_iyqGdK`1 zdm^zwG;$;?lHou|98N~8Fj!!$1kIEcNLprpAQBTjiDV>Z^@x-e3MZ2QNq~3~JON{I zGa3&DtVld2!UGWtSO^UsG=qHy&7MFcDzG{nXXP`TZ{p#(H$EaVXaxLhHqpB1}R4IIelu`*bE=M61d_Pr3 zA~4L##3AC+%OZ1elx9eO{?zwiSeA$)3lIC!oL`6&l~7ZM~h4j%6%79Iz9pX2?-@(lUo&rJ!FfM*;$-t#PH z9lZPPp6Qb$KQ?`y1q3OwEtV8R2Wb4gBwh#IZ z9eZ;}f7_-1+NHnl(l5L8^Dg}br(XBRw(ONhjO@F{@!wB%bhgxu*1c*BH~tEGnOpQ- z@cf`huUPpwsF1+n#&f_J!?S*h&@f{yg47w~=zxi7T_un?M zQ^v(VZ8t8?lp4M<s_%N77dVQC1ym1v4jqD9;o-x$8 z7LD3~W%NfUR;-ud=K5w;XZ@89z zA4W-S_WZTSz?6Mq93W&2m91GPTWguA8~sCQ=)_I52FH!z6I0S}>;evri3gzvLr*H> zn?}R9)i6%{H=c7}=L!gjg}L8yr+M9q6j6{)Nb( z*VqN=vKS0m+4%AE*ovt5P9m4fkuumYG4>&~cCX#qeX6xZuGX%Br)uq8D9IieLtQf= zV|}$eS8LY9_rdTg-W`}SdGFYF3--nnF9Ti%ybO35@G{_Kz{`M_0WSky2D}XXe`df3 zZ!fxH_`XQ9;+lM+wM|=-y30Z0t1iXCDfpI`egWUj;v@Ui`?(zc7m%2OKLP+VfM<{g z>;Qc0RxURRh=T7vQG7@C3*SJcZ~44AAg5xUq$v`AQkhkC%2R?xW3ATmrrmCQCwfJz_ zvY_(YB~9~Zmwwg zRUp@V$|61Fz-uch58R`0De1i44%d02@Dt54r3zkmhtEMMZ2!ycTpabYw1|$^sI8*{ zuT8s3c3wMo4TC^<&Dj#A3S1xR6bch3X`LFcnZxHr6ntJo;k9myl`6Ip!Th7t5$^X@ z^5eB|-2MvU+3%k@b$*anNx^$SdA=Ie2d@jI&UuH&QK^@a{qLmnc~JHLHQ@E#?h0$^ zdix1G2p=U(5M~HR2;KGkJDt~A?rLh$Np?X{pv7-MCS&t-qh> zkFOE)SSD`e++KK{d|-Kk5~+~`4&y@pcpXdNMRW(P4<&b@5ub7Kn~3N8i2d83;DdF& z>->u0>x`?ced1I0eW9#Ed;<#Du6yzDN$J1HUf0V0&q1M3|BId1^Rk|5QTZ9J;SLt6 z=aTeaEZpPdH5qn~y^fx1`JMD%V&8Afe*lF->!GV4A%%Dyc#VS{_>|<~TgUGpp}4z9 zJr4n2DVB;#mwyobOR5Bak8y30BK168gnyFiclYOqMf`sbyvB_=@G|gKB})b04{Ul9 zdCU+6m672c;45KV)%w{};SYdc2o{aT=UOtqNB-_SOq2gyXaYt4HwE}N$xABlqa40K zv7hdGs)5(?Je8sYPgUnxn}A=H$0+3y^v7KVuJ4l&@CDb$9|$I`Iz0}n&I8>M(+czo zAW~Mkr$-NpJ1f*ptKSUb8ub)-hT>*#G~OMEnjtHmOqqf7fC$F>6Vb304(YXpJ#YnTleqS(_*&lZ8l+j zeDhcK?%31T1T<{EFk1|=8qNEKxvPEO&K>RMzShR;wt;%Lh3{*P+cvFJQA%Ba28A`>? zzCbL5+XveAL1ZWrGt;SXNI7K9LYn zJ9f6!;Lw%seSuV;&_jbUXhNZtRF*^GWD2)$NH`+Ihx=&s_JyD})>Iv87^?^_LsNnN2vnxR;o1lt?w@|REehPy zpNPVFBzy(IZ=n+Rem$N?l3Dt48Sy?iaPG$O#rCD4FAC4slqSR$C^+NY`_u3}fm8T< znK}I3cgFL)gHdBgLU;Uw!2cEIe%ybaA2Y6_IGQGYr2hf1!E&TToK=d+A_{kZ?^$9NRtajwid&zBkf)RMdZ zM2lf4U`{!n=kJU>f9Lky=a2i(Fn%W-DEvIYct+6z<1uIM_-BE`oN)d2?-~8B@pBTm zNO52Pr-60GYZS+rQDOEc|6DRY=Zb%Z42mg1?C;LsWs0|((a4jqhExW3{Oe%A_Bp;*Q=W|VO0_@T@xKL& zGrmt#u8cpnBUORN57RfGumBEz?&Ifc-cRcGXPxmD#8x=s`T2W +#include +#include +#include +#include + +#ifndef BUFFSIZE +#define BUFFSIZE 32768 +#endif + +int main (int argc, char **argv) { + int n; + char buf[BUFFSIZE]; + + // Cast to void to silence compiler warnings + (void)argc; + (void)argv; + + while ((n = read(STDIN_FILENO, buf, BUFFSIZE)) > 0) { + if (write(STDOUT_FILENO, buf, n) != n) { + fprintf(stderr, "Unable to write: %s\n", strerror(errno)); + exit(EXIT_FAILURE); + } + } + + if (n < 0) { + fprintf(stderr, "Unable to read: %s\n", strerror(errno)); + exit(EXIT_FAILURE); + } + + return EXIT_SUCCESS; +}