时光飞逝,转眼已经毕业快2年了,觉得自己学的东西多却不精。对此深深的思考一下,觉得有必要连载unix环境编程文章,以此激励自己学习。在此立贴为证,2天一篇博客从零开始阐述unix的环境编程。参考书籍UNIX环境高级编程第三版如上图1.1描述的是一个UNIX的体系结构。对于一个Li ...
时光飞逝,转眼已经毕业快2年了,觉得自己学的东西多却不精。对此深深的思考一下,觉得有必要连载unix环境编程文章,以此激励自己学习。在此立贴为证,2天一篇博客从零开始阐述unix的环境编程。
参考书籍UNIX环境高级编程第三版
如上图1.1描述的是一个UNIX的体系结构。对于一个Linux的新手上图描述就是几个关键字。但对于一个Linux的高手来说,这个图描述了太多的信息量了。
内核:从严格的意义上来说,可将操作系统理解成一个软件,他控制计算机的硬件资源提供给应用程序运行的环境。其实Linux就是一个内核,它是GNU操作系统的内核。当然我们熟悉的MAC OSX也是GNU操作系统的内核。
系统调用:系统调用是内核对外提供服务一个接口,好比你要操作键盘。肯定有人会说这个知道我们可以通过API函数来操作键盘,你说的没错。但是要记住API函数也就是库函数是建立在系统调用之上的。内核提供的系统调用数目非常有限,到2.6.23版本的内核也不过才达到仅仅325个,但是API函数有那么多。
库函数:就是一个满足POSIX标准的函数集合
Shell:一类的特殊的软件,它是命令解释器。类比window下cmd,它也是通过系统调用方式与内核交互。我们可以通过strace 命令查看 shell命令的实现过程。如strace echo。
总结:系统调用是访问内核的唯一手段,在驱动开发时候会更加深刻的理解系统调用。
登录UNIX
我们登录unix系统的时候,系统做了什么呢?原来在我们输入用户名和密码的时候,系统会在/etc/passwd查找匹配的用户名和密码
如上图依次是用户名:密码(系统已将口令加密到另一个文件):数字用户ID:数字组用户ID:注释码:起始目录:shell程序
总共有6个:号组成的7个字段。哈哈现在明白你的登录过程了吧,知道为什么你的起始目录在/root下了吧;
要注意的地方shell版本很多,要注意观看自己的系统是什么shell
目前比较流行的shell
1./bin/bash
2. /bin/sh
3. /bin/ksh
4. /bin/csh
5. /bin/tcsh
6. /bin/dash
我们可以通过如下命令来观看我们正在运行的shell的版本
文件和目录
- Unix系统都是从根目录/扩展下来的
- 我们创建新目录的时候都出创建2个文件名分别是.和..。.是指向当前目录,..指向上级目录
- 文件命名的时候不要出现/和空字符。斜杠是用来分割路径名中各个文件的,空格符则是终止一个路径名
下面我们用C来实现 shell中 ls命令
#include <unistd.h>#include <dirent.h>#include <errno.h>#include <stdlib.h>#include <string.h>int main(int argc,char *argv[]){ DIR *dp;//目录的描述符 struct dirent *dirp;//目录内容的结构体 if(argc != 2) { printf("please input --help"); return -1; } if(strcmp(argv[1],"--help") == 0) { puts("-a, --all不隐藏任何以. 开始的项目\n \ -A, --almost-all 列出除. 及.. 以外的任何项目\n\ --author 与-l 同时使用时列出每个文件的作者\n\ -b, --escape 以八进制溢出序列表示不可打印的字符\n"); return 0; } if((dp = opendir(argv[1])) == NULL) perror("can not open %s",argv[1]);/判断标准错误的类型 while((dirp = readdir(dp)) != NULL ) printf("%s\n",dirp->d_name); // printf("Hello world!\n"); return 0;}
海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com
原标题:UNIX基础上
关键词:
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。