Linux模拟shell小demo分享与记录

首先声明,其实是老师布置的作业,源码来自于一个师兄,只做学习使用。源码链接

实现的主要功能如下:

    1. ls (-a -d -i -l | -adil)
    2. echo ($?)
    3. cat
    4. mkdir
    5. rmdir
    6. rm
    7. cd (-)
    8. chmod
    9. pwd
    10. wc (-)
    11. date
    12. exit (Ctrl-D)
    13. help
    14. kill (-signum)
    15. who
    16. history
    17. more
    18. grep (-n -v | -nv)
    19. mv
    20. tee (-a)
    21. time
    22. ./

    (PS. Putting a '-' before a command will call the Bash built-in commands.)

在此我只摘录其中的一些函数进行学习记录:

  1. int gethostname(char *name, size_t len)调用该函数获取主机名到name中;
  2. uid_t getuid(void)获取执行目前进程的用户识别码,返回值为0表示为root用户;
  3. int pipe(int filedes[2])创建管道函数,用于父子进程之间进行通信,输入参数即为读写句柄;
  4. char *getcwd(char *buf, size_t size)用于获取当前工作目录,如果不管返回值获取的目录保存进buf中,有可能指定的size太小而导致异常,所以有另一种用法,char *buf=getcwd(null,0),这种形式实际调用了malloc进行动态内存分配了,所以使用完需释放buf;
  5. char *strdup(char *str)拷贝一个字符串的副本,输入参数不能为null,因为该函数内部有strlen函数,该函数输入参数不能为null;

  6. char *basename(char *path)返回输入路径最后一个“/”后面的内容;

  7. fork函数创建一个子进程,创建成功后,之后的代码父子进程都会执行,在子进程中fork返回0,在父进程中fork返回新创建的子进程的id,失败返回负数;

  8. execvp("ps", ps_argv)根据PATH环境变量提供的ps命令执行程序;

  9. char *getenv(const char *name) 返回给定环境变量名称所对应内容的指针;

  10. void *calloc(unsigned n,unsigned size)分配内存函数,分配成功后初始化内存空间为0,malloc不初始化;

  11. ssize_t getline(char **lineptr, size_t *n, FILE *stream)从文件中读取一行,该函数在标准C中是不存在的;

  12.   scandir函数详细链接;

  13. tcgetattr和tcsetattr函数用于控制终端详细链接

  14.  int unlink(const char *pathname)从文件系统中删除一个指定名字的文件,并清空这个文件使用的可用的系统资源,如空间、进程等;

  15. char *strchr(char *str,char character)返回从字符串str中寻找character第一次出现的位置的指针;

  16. struct utmp *getutent(void)从utmp文件中读取登录数据;

  17. 还有一些函数跟命令命名是一致的,比如mkdir,rmdir等,具体man就行。

你可能感兴趣的:(学习记录,linux)