main.c | ||
Makefile | ||
README.md |
Sagi Dayan 2014
OS course Ex1 - Home - cshell - LINUX/UNIX
a basic Terminal emulator written in C for OS course in JCE.
This Terminal will be able to run almost all programs in the PATH /bin/ and will create a new process of that .
the Prompt format:
<exit code> <userName>@<hostName>$
the exit code is the Return code from the last child process. if 0 -> child ended successfully.
for more details see Q&A
sagi dayan (c) 2014.
Build & Run & Exit
To build cshell run in terminal:
$ make
and run with the command:
$ cshell
to quit run from cshell:
$ exit
to clean the directory run:
$ make clean
Design Decisions & Issues
the main idea is to be able to run & create processes via commands. you can enter almost any basic command (and some more) that the binarys are in PATH /bin/ .
Main issues:
- you cannot navigate to different directories.
- you cannot pipe command and arguments.
- every word will be treated as an argumant! therefore you cannot write something like:
$ ls -a > "my text.txt"
cshell will see the arguments as:
# ls
# -a
# >
# "my
# text.text"
and that will throw you an error.
Q&A
Q: can i redirect output to a file?
A: yes you can. use the "redirect" char '>' and then the file name. like so:
$ man ls > myFile.txt
Note: the content of the file Will be deleted, in othe words, it acts
exactly like '>' in the UNIX Shell. not '>>'.
Note2: the file name must be in one word. as you can see in Issues,
cshell dose not support an argument that is seperated with space or tab.
Q: what is that wired number before the prompt?
A: that wierd number is atually the return code of the last process that you ran. the Unix defult return code of a succssesful end of process will be 0. otherwise, in case fo an error or an exception, the code can be any number (code) that the developer of that specific software maked down to exit at.
Q: why 255?
A: as i noticed, the defaul code of "exit(1)" is actually 256, but in the exersize wanted to return 255 in case of an "unknown command" or default exit(1).
Q: why cant i exit cshell with ctrl-c (^C)?
A: because that was also another task in this Ex. only running childes will be killed, while the main process (cshell) will stay running and kicking.
Q: So how to exit?
A: run 'exit'.
Q: Can i redirect stderr output to file?
A: No. the task was to implament only regular output.