summaryrefslogtreecommitdiff
path: root/userspace/cat.c
diff options
context:
space:
mode:
authorMiguel <m.i@gmx.at>2018-09-21 01:43:25 +0200
committerMiguel <m.i@gmx.at>2018-09-21 01:43:25 +0200
commitace0646608c393d8952b14536090c302bed2ee85 (patch)
tree5d96e0d0a66c27818b677af3a84ef52af0260be1 /userspace/cat.c
parentaeefdb37d1fc1c0eb7953b9c196cab09460bc167 (diff)
piperei working finally :)
Diffstat (limited to 'userspace/cat.c')
-rw-r--r--userspace/cat.c57
1 files changed, 31 insertions, 26 deletions
diff --git a/userspace/cat.c b/userspace/cat.c
index 94cbdaa..41768ea 100644
--- a/userspace/cat.c
+++ b/userspace/cat.c
@@ -3,34 +3,39 @@
int main(int argc, char **argv)
{
- printf("hmm\n");
- printf("pwd=%s\n",getenv("PWD"));
- FILE *f;
- if(argc>1){
- char buf[256];
- if(argv[1][0]!='/')
- {
- sprintf(buf,"%s/%s",getenv("PWD"),argv[1]);
- printf("cat %s\n",buf);
- f=fopen(buf,"r");
- }
- else
- {
- printf("cat %s\n",argv[1]);
- f=fopen(argv[1],"r");
- }
- }
- else f=stdin;
+ // Input (default stdin)
+ FILE *in=stdin;
+
+ // Output
+ FILE *out=stdout;
- setvbuf(stdin,NULL,_IONBF,0);
- setvbuf(stdout,NULL,_IONBF,0);
+ // In case a Filename was supplied
+ if(argc>1){
+ char buf[256];
- char c;
+ // Relative Path
+ if(argv[1][0]!='/')
+ {
+ sprintf(buf,"%s/%s",getenv("PWD"),argv[1]);
+ in=fopen(buf,"r");
+ }
- while(fread(&c,1,1,f))
- {
- printf("%c",c);
- }
+ // Absolute Path
+ else
+ {
+ in=fopen(argv[1],"r");
+ }
+ }
+
+ char buf[256];
+
+ while(1)
+ {
+ int l=fread(buf,1,255,in);
+ buf[l]=0;
+ if(l==0)break;
+ fwrite(buf,1,l,out);
+ }
- return 0;
+ return EXIT_SUCCESS;
}