0%

Linux程序设计——读书笔记 Chapter 1

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作为后缀来命名

静态库的缺点:当你同时运行许多应用程序,并且它们都使用同一个库中的函数时,你可能会在内存中出现许多相同函数的副本,实际上在程序文件本身中也有许多副本,这个会造成内存和磁盘资源的浪费。

所以使用共享库来解决静态库的这个问题