Unix相关
Unix:符合P1003,或POSIX(便携式操作系统接口)规范的操作系统,POSIX规范定义了所有必须的UNIX操作系统功能的名称、接口和行为。只有严格遵守该规范的操作系统才能被叫做Unix。目前有很多类Unix操作系统的系统,如IBM的AIX、HP的HP-UX或者Sun的Solaris。
Unix哲学
- Simplicity 简单性:KISS:keep it small and simple 程序越复杂,bug也越复杂,debug也更难;
- Focus 集中性:one program perform one task,feature过多的program会难用且难以维护,每个program考虑尽量少的需求,不要一个program囊括所有的需求;
- Reusable Component 可重用组件:这里提倡简单灵活的interface和通用的代码(OS:在实际的开发中它会节约我们的人力成本,但是需要确保正确性,不然人家调用了发现,我丢,全是bug);
- Filters 过滤器:用别人的输出作为自己的输入,站在别人的肩膀上开发自己的程序,也是复用性的一种体现;
- Open File Formats 开放的文件格式
- Flexibility 灵活性:需求是可变的,程序要设计得灵活才能很好地迭代,不然重构会非常频繁。
Linux
Linux应用程序由两种特殊类型的文件表示:可执行文件和脚本(executables and scripts)。简单来说,可执行文件可以直接跑,但是脚本还需要解释器。
比较重要的保存文件的三个path:
- /bin:二进制文件,用于启动系统的程序;
- /usr/bin:用户二进制文件,用户可使用的标准程序;
- /usr/local/bin:本地的二进制文件,特定于安装的程序
一些可选的操作系统组件和第三方应用程序可以安装在/opt的子目录中(OS:像我们公司的一些log日志就是/opt/tiger/XXX/XXX/.log,包括atop查看日志也是在opt中)。
Linux用(:)来分割PATH中的各个路径,但是Windows是用的(;)
1 | /usr/local/bin:/bin:/usr/bin:.:/home/neil/bin:/usr/X11R6/bin |
Linux中用的是斜杠(/)来分割directory name,但是windows用的是反斜杠(\)。
与众不同的Windows。。。平时工作中用的是macos和Linux,有些命令windows用不了。。泪目。。
Development System Roadmap
GCC编译
-I:direct头文件,eg: gcc -I/usr/openwin/include fred.c
共享库
使用.so作为后缀来命名
静态库的缺点:当你同时运行许多应用程序,并且它们都使用同一个库中的函数时,你可能会在内存中出现许多相同函数的副本,实际上在程序文件本身中也有许多副本,这个会造成内存和磁盘资源的浪费。
所以使用共享库来解决静态库的这个问题