In the code on the following page:
http://www.cs.cf.ac.uk/Dave/C/section2_22_22.html
a basic UNIX shell is represented. Why does commands such as rm, mv, mkdir, rmdir, ls, etc can be executed but many other ones such as cd, or & (background processing) have to be implemented in the code? i.e. the code doesn't define rm or mv but the system understands them when they're typed in this shell, but that's not the case with cd.
Please advise.