UNIX系统介绍:
最早版于1970年问世于贝尔实验室,作者是丹尼斯.里奇和肯.汤普逊。
是最早的多用户、多任务、支持多种CPU架构,高安全性、高稳定性、高可靠性。
既能构架大型关键性业务系统的商用服务器,也能支持嵌入式设备。

MiniX基于微内核加载的类UNIX系统,名为MINIX(即小型的UNIX),并开放全部源代码给大学教学和研究工作,Linux之父林纳克斯,正是在受了MiniX的启发,才开发了Linux系统。

Linux系统介绍:
Linux,全称GNU/Linux,其内核由林纳斯・托瓦兹于1991年第一次公开在校内网的FTP服务器上。

它主要受到Minix和Unix思想的启发,是一个基于POSIX(可移植操作系统接口)和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。相关知识:Linux的标志:小企鹅,因为企鹅是南极的标志性动物,而南极目前没有被任何任何国家占有,是属于全世界人民的。GNU组织:通用的非商业类UNIX系统,目前也是全世界最大的开源组织,负责Linux内核源的升级维护。GPL通用许可证:在带GPL证书的代码的基础上开发出的软件,也必须支持GPL证书。POSIX:统一的操作系统接口,UNIX和Linux都遵循了该标准,所有它们的命令、API接口基本上是通用的。发行版:Linux只是内核,内核+Shell+基础软件才是可用的操作系统。其它公司可以根据Linux内核制作出不同版的Linux系统。ubuntu、redhat、CentOS、debian、UOS

GNU编译工具:
多样化:
支持各种编程语言,支持各种操作系统。
gcc -v 查看版信息
构建过程:
预处理:gcc -E code.c -o code.i
编译:gcc -S code.i -> code.s
汇编:gcc -c code.s -> code.o
链接:gcc a.o b.o c.o … a.out
文件类型:
.h 头文件
.h.gch 头文件的编译结果,会被优先使用
.i 预处理文件
.c 源文件
.s 汇编文件
.o 目标文件
.a 静态库文件
.so 共享库文件
编译参数:
-E 只预处理
-S 编译
-c 汇编
-g 生成调试信息
-o 设置编译结果的名字
-std 设置语法标准
-Wall 产生尽可能多的警告
-Werror 把警告当错误处理
-L 设置库文件的查找路径
-I 设置头文件的查找路径
-l 指定要加载的库文件的名字
-On 优化等级
-pedantic 对于不符合 ANSI/ISO 语法标准的代码产生警告。
预处理指令:
#include <>/"" 包含头文件
#define 定义宏常量、函数
# 把标识符转换成字符串
## 连接标识符
#ifdef 宏名存在条件为真
#ifndef 宏名不存在条件为真
#undef 删除宏
#if/#elif/#else/#endif 条件判断

    #error 提示错误,并阻止生成可执行文件,要与条件判断配合使用。#warning 提示警告,#line 设置行号#pragma pack(1/2/4/8) 对齐与补齐的最大字节数#pragma once 相当于头文件卫士#pragma GCC dependency "file.h" 监控文件#pragma GCC poison "key" 设置关键字为病毒,禁止在代码中使用。

库:
库文件就是目标文件的集合,可以被其它代码调用,把代码封装成库文件后方便使用、方便管理、安全性高、保密性强。

静态库:就是目标文件的集合,调用静态库就是把静态库中的二进制指令拷贝到可执行文件中。优点:运行速度比共享库快。缺点:可执行文件相对较大,当静态库修改后,可执行文件要重新编译。共享库:就是没入口的可以执行文件,调用共享库就是记录共享中二进制指针的位置即可。当执行可执行文件时共享库会被一起加载到内存,可执行文件中可以跳转到共享库中执行。优点:可执行文件相对较小,当共享库修改后,可执行文件不要重新编译。缺点:运行速度比静态库慢,可执行文件运行时也需要依赖共享库。

静态库:
制作静态库:
1、编译出目标文件
gcc -c code.c
2、打包目标文件生成静态库
ar -r libname.a a.o b.o c.o …
使用静态库:
1、直接使用
gcc code.c libname.a
2、指定库文件的位置
-L指定库的路径 -l指定库名
gcc code.c -Lpath -lname
3、通过设置环境变量指定库的路径,-l指定库名
打开配置文件:vi ~/.bashrc
在文件的末尾添加:export LIBRARY_PATH=$LIBRARY_PATH:path
保存退出后重新加载:source ~/.bashrc
使用静态库:gcc code.c -lname
注意:删除环境变量,需要关闭终端,再重新打开。

共享库:
制作共享库:
1、编译生成目标文件
gcc -fpic -c code.c
fpic 位置无关
2、生成共享库
gcc -shared -fpic a.o b.o c.o … -o libname.so
使用共享库:
1、直接使用
gcc code.c libname.so
2、指定库文件的位置
-L指定库的路径 -l指定库名
gcc code.c -Lpath -lname
3、通过设置环境变量指定库的路径 LIBRARY_PATH
gcc code.c -lname
注意:设置程序执行共享库的加载路径
打开配置文件:vi ~/.bashrc
在文件的末尾添加:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:path
保存退出后重新加载:source ~/.bashrc

注意:当共享与静态库同时存在时,编译器会优先使用共享库,-static编译参数 优先使用静态库。

动态加载共享库:
#include <dlfcn.h>

void *dlopen(const char *filename, int flag);
功能:打开共享库
filename:共享库的名字
flag:RTLD_LAZY 延迟加载RTLD_NOW  立即加载
返回值:共享库的句柄char *dlerror(void);
功能:获取错误信息void *dlsym(void *handle, const char *symbol);
功能:从共享库中获取函数指针
handle:共享库的句柄,也就是dlopen的返回值
symbol:函数名
返回值:成功返回函数的地址,失败返回NULLint dlclose(void *handle);
功能:关闭共享库
返回值:成功返回0,失败返回-1。注意:使用要添加dl库,这种方式的好处就是可以在编译时不依赖共享库。

静态库和共享库辅助工具:
ldd 查看可执行程序依赖那些共享库
nm 查看目标文件、可执行文件、静态库、共享库中的符号列表
strip 减肥,删除目标文件、可执行文件、静态库、共享库中的符号。
objdump 显示目标文件、可执行文件、静态库、共享库反汇编信息。

环境变量表:
每个程序执行时操作系统都会给一个环境变量表,该表中记录了操作系统所有的环境变量,这些环境变量反映了操作系统的配置,以及该程序所处理的系统环境。

声明extern char** environ; 就可以使用。
操作环境变量表的函数:char *getenv(const char *name);功能:获取环境变量的值int setenv(const char *name, const char *value, int overwrite);功能:向环境变量表中添加环境变量name:环境变量名value:环境变量的值overwrite:当环境存在时为真修改环境变量的值为假不修改环境变量的值int putenv(char *string);功能:name=value 添加或修改环境变量,如果已经存在则修改,不存在则添加。返回值:成功返回0,失败返回-1。int unsetenv(const char *name);功能:删除环境变量返回值:成功返回0,失败返回-1。int clearenv(void);功能:清空环境变量表

Linux/Unix 系统简介相关推荐

  1. Linux/Unix系统下nginx+php安装简明教程

    本文转载自Linux/Unix系统下nginx+php安装简明教程,请保留转载信息~ 一.安装nginx: 1. 安装pcre库,nginx的rewrite模板需用到pcre库: mkdir -p / ...

  2. 在Linux/Unix系统下用iconv命令处理文本文件中文乱码问题

    iconv命令是运行于linux/unix平台的文件编码装换工具.当我们在linux/unix系统shell查看文本文件时,常常会发现文件的中文是乱码的,这是由于文本文件的编码与当前操作系统设置的编码 ...

  3. Linux/Unix系统SSH远程按Backspace键删除时出现^H的处理方法

    在linux/unix系统中连接SSH远程工作时,输出字符后按Backspace键删除时,会出现^H,这对习惯了按Backspace键删除的用户来说,感觉非常别扭,虽然可以通过Ctrl+Backspa ...

  4. unix服务器备份文件命令,linux/unix系统间文件备份脚本

    这是我之前写的一个shell脚本,用于linux/unix系统间的文件自动备份. 脚本的主要功能有:用于不同服务器间当天的文件的同步或拷贝:需要expect命令支持,RHEL和AIX测试正常,需要ex ...

  5. Linux桌面系统简介

    1.简介 Linux/UNIX操作系统图形桌面环境经历了从无到有,由X-Window到GNOME.KDE的发展历程. 2.X-Window 传统的UNIX操作系统都是只有命令行终端的用户界面,用户必须 ...

  6. linux/unix系统编程手册11-15

    title: linux/unix编程手册-11_15 date: 2018-05-27 11:53:07 categories: programming tags: tips linux/unix编 ...

  7. linux unix系统区别,Unix和Linux操作系统有什么区别?看这里!

    现在操作系统有很多种,比如说Windows.Linux.Unix等,不过在很多人的意识中Unix和Linux属于相同的,那么它们之间有着怎样的区别呢?小编为大家详细介绍一下. 什么是Unix?有什么特 ...

  8. linux中85379端口如何恢复,技术|如何在 Linux/Unix 系统中验证端口是否打开

    在 Linux 或者类 Unix 中,我该如何检查某个端口是否被占用?我又该如何验证 Linux 服务器中有哪些端口处于监听状态? 验证哪些端口在服务器的网络接口上处于监听状态是非常重要的.你需要注意 ...

  9. Linux/UNIX系统编程手册gg

    Linux系统: "所见皆文件" 一个比较好的博客 一.Linux基础操作 Linux系统目录: bin:存放二进制可执行文件 boot:存放开机启动程序 dev:存放设备文件: ...

最新文章

  1. 还有Html.EditorFor和Html.Html.TextBox到底差什么呢
  2. 14 调整数组顺序使奇数位于偶数前面
  3. 阿里云E-MapReduce 创建执行计划
  4. P4345 [SHOI2015]超能粒子炮·改
  5. solr 模糊匹配_Solr中的前缀和后缀匹配
  6. artTemplate
  7. Python中import导入模块
  8. 硬盘安装linux_Surface-Laptop3 安装Archlinux折腾小记
  9. 5个优化页面加载速度提高SEO排名的最佳实践
  10. 将bin文件以16进制字符显示
  11. AUTOCAD——坐标引线标注
  12. java 动态性之反射机制 详解 案例,java架构师技术图谱
  13. 荆州水文水位查询_长江水位实时查询网(长江水位公告实时查询)
  14. SmartNIC — TSO、GSO、LRO、GRO 技术
  15. 三国志战略版:先锋斥候广州行
  16. 【已解决】U盘文件误删 恢复,实用有效 免费无充值 Recuva
  17. python3刷火车票_Python3实现抢火车票功能(上)
  18. 幻灯播放主题图片插件thread_slide_for_discuz x2 适合户外 摄影类论坛
  19. 用python进行网络爬虫(三)—— 数据抓取
  20. vue 中的 prop

热门文章

  1. 搭建hexo博客修改设置网页图标icon失败的解决方法
  2. SpringBoot项目-自定义默认网页图标
  3. 了解SPI总线CAN控制器 MCP2515配置 一文即可
  4. Android开发,待了3年的小创公司突然没了,上哪去找我的(1),讲的明明白白
  5. 开源web终端ssh解决方案-gateone简介
  6. 父母延长退休,我光荣失业
  7. 在线计算机手机中病毒 提示,手机中病毒怎么办 手机中病毒解决方法【详细介绍】...
  8. mysql 带宽测试_网络带宽如何影响 MySQL 性能
  9. SQL*Plus 系统变量之24 - HEA[DING]
  10. 积分兑换商城对企业有什么样的意义?