diff options
Diffstat (limited to 'userspace/cat.c')
| -rw-r--r-- | userspace/cat.c | 57 |
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; } |
