diff options
Diffstat (limited to 'userspace')
| -rw-r--r-- | userspace/cat.c | 17 | ||||
| -rw-r--r-- | userspace/ls.c | 24 | ||||
| -rw-r--r-- | userspace/sysfs_write.c | 9 |
3 files changed, 33 insertions, 17 deletions
diff --git a/userspace/cat.c b/userspace/cat.c index 5b419ca..d0b018b 100644 --- a/userspace/cat.c +++ b/userspace/cat.c @@ -5,8 +5,17 @@ int main(int argc, char **argv) FILE *f; if(argc>1){ char buf[256]; - sprintf(buf,"%s/%s",getenv("PWD"),argv[1]); - f=fopen(buf,"r"); + 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; @@ -15,14 +24,10 @@ int main(int argc, char **argv) char c; - printf("-- reading from file byte by byte --\n\n"); - while(fread(&c,1,1,f)) { printf("%c",c); } - printf("\n-- no more data on this file --\n"); - return 0; } diff --git a/userspace/ls.c b/userspace/ls.c index 416e139..b3a17ef 100644 --- a/userspace/ls.c +++ b/userspace/ls.c @@ -1,10 +1,5 @@ #include "interface/fs.h" -void usage() -{ - puts("ls [inode_nr]"); -} - int main(int argc, char **argv) { char *dir=getenv("PWD"); @@ -13,8 +8,9 @@ int main(int argc, char **argv) { if(argv[1][0]!='/') { + if(!strcmp(dir,"/"))dir++; char buf[256]; - sprintf(buf,"%s/%s",dir,argv[1]); + sprintf(buf,"%s/%s",dir,argv[1]); dir=buf; } else @@ -23,16 +19,22 @@ int main(int argc, char **argv) } } + printf("listing %s\n",dir); + fs_dirent dirs; uint32_t pos=0; - int cnt=0; while(1) { - cnt =_readdir(dir,&dirs,&pos); - if(cnt<1) break; - printf("% 12i %s%c\n",dirs.inode, dirs.name, ((dirs.type==FS_FILE_TYPE_DIR)?'/':' ')); - } + uint32_t ret=_readdir(dir,&dirs,&pos); + if(ret==-1) + { + printf("directory not found!\n"); + break; + } + if(ret==0)break; + printf("% 12i %s%c\n",dirs.inode, dirs.name, ((dirs.type==FS_FILE_TYPE_DIR)?'/':' ')); + } return 0; } diff --git a/userspace/sysfs_write.c b/userspace/sysfs_write.c new file mode 100644 index 0000000..b35f063 --- /dev/null +++ b/userspace/sysfs_write.c @@ -0,0 +1,9 @@ +#include <stdio.h> +int main() +{ + FILE *f=fopen("/sys/mem","w"); + uint32_t data=0xaabbccdd; + fwrite(&data,4,1,f); +// fclose(f); // not automatically by newlib? + fflush(f); +} |
