- added cat command
This commit is contained in:
parent
13aaaa8bdc
commit
df4eaf5163
1 changed files with 28 additions and 4 deletions
|
@ -38,10 +38,11 @@ void showlogo() {
|
||||||
|
|
||||||
void help() {
|
void help() {
|
||||||
printf("shell builtin commands: \n");
|
printf("shell builtin commands: \n");
|
||||||
printf("cd <path>:\t change current working directory to path\n");
|
printf("cd <path> :\t change current working directory to path\n");
|
||||||
printf("pwd :\t show current working directory\n");
|
printf("pwd :\t show current working directory\n");
|
||||||
printf("help :\t this short help\n");
|
printf("cat <path>:\t print files\n");
|
||||||
printf("exit :\t exit the shell \n");
|
printf("help :\t this short help\n");
|
||||||
|
printf("exit :\t exit the shell \n");
|
||||||
}
|
}
|
||||||
|
|
||||||
#define MAXARGS 16
|
#define MAXARGS 16
|
||||||
|
@ -128,6 +129,27 @@ void ms_setcwd(char* path) {
|
||||||
setenv("PWD", newpath, 1);
|
setenv("PWD", newpath, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int ms_cat(char* filename)
|
||||||
|
{
|
||||||
|
int fd, r = 0;
|
||||||
|
char* buffer = malloc(1024*sizeof(char));
|
||||||
|
|
||||||
|
fd = open(filename, 0, "wr");
|
||||||
|
|
||||||
|
if ((!filename) || (fd < 0))
|
||||||
|
printf("cat: No such file or directory");
|
||||||
|
|
||||||
|
do {
|
||||||
|
r = read(fd, buffer, 1024);
|
||||||
|
write(1, buffer, r);
|
||||||
|
} while (r > 0);
|
||||||
|
|
||||||
|
printf("\n");
|
||||||
|
close(fd);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char** argv)
|
int main(int argc, char** argv)
|
||||||
{
|
{
|
||||||
char commandline[MAXCMDLINE];
|
char commandline[MAXCMDLINE];
|
||||||
|
@ -158,6 +180,8 @@ int main(int argc, char** argv)
|
||||||
printf("%s\n", ms_getcwd());
|
printf("%s\n", ms_getcwd());
|
||||||
} else if (!strcmp(command, "cd")) {
|
} else if (!strcmp(command, "cd")) {
|
||||||
ms_setcwd(newargv[1]);
|
ms_setcwd(newargv[1]);
|
||||||
|
} else if (!strcmp(command, "cat")) {
|
||||||
|
ms_cat(newargv[1]);
|
||||||
} else {
|
} else {
|
||||||
char path[MAXPATH];
|
char path[MAXPATH];
|
||||||
sprintf(path, "/bin/%s", command);
|
sprintf(path, "/bin/%s", command);
|
||||||
|
|
Loading…
Add table
Reference in a new issue