环境变量 - 存储在内存中的信息,格式是映射,作用就是 帮助系统 进行一些工作,一般是 查找某个东西。
预处理指令:#warning #error #pragma

使用程序直接调用库文件的函数(动态编程)
   #include <dlfcn.h>
   1 用dlopen打开一个库文件,返回void*
   2 用dlsym按函数名打开一个函数,返回函数指针
   3 使用函数指针
   4 用dlclose 关闭库文件。
   5 dlerror函数判断是否出错,!=NULL 出错
   注:dlopen时,flag可以设置延迟加载
    RTLD_LAZY - 延迟
    RTLD_NOW  - 立刻加载

  C程序员的错误处理(针对所有的代码)
   什么是错误处理?
    程序中有正确的分支和错误的分支,关于错误的情况如何处理,就是 错误处理。错误处理的代码不影响错误是否发生。
    C程序员处理错误的方式:(常规方式)
    1 返回-1代表错误。
     a 如果-1不是函数的有效返回值,直接返回-1代表错误。
     b 如果-1 是函数的有效返回值,用-1代表错误,用指针 取返回值。
    2 返回NULL 代表错误。
     一般来说,返回值是 指针类型时,用NULL代表错误。
    3 不需要考虑错误处理的函数 返回void

C语言中没有string,字符串用两种方式表示:(*)
   char* s1;
   char s2[20];
   其中,s1可以用 = 赋值,s2只能用=初始化,不能用 = 赋值,s2的赋值使用strcpy函数。
   如果s1 = "aaa";(字面值),不支持strcpy。
  常用的字符串函数:
   strcpy - 赋值
   strlen - 取长度
   strcat - 追加内容
   strcmp - 比较两个字符串(通常判定字符串相同)
   strncmp - 比较两个字符串的前n个字符

   C语言对错误的处理也有支持,主要是:
   定义了一个全局变量errno,存储错误的编号。
   定义了 strerror/perror/printf("%m")三个函数转换错误编号和错误信息,后两个可以自动打印。
   注:不是所有的函数都使用errno处理错误。

  环境变量和环境表在程序中的使用
   C语言中,提供了环境表变量environ 存储 环境变量的各种信息,类型是 一个 char**(字符指针数组),需要extern。environ存储的是 首地址。
  Unix/Linux的内存管理(明天继续)
   STL - 内存自动分配和回收
    |
   C++ - new分配 delete回收
    |
    C - malloc分配 free回收
    |
Linux系统函数 - brk/sbrk
    |
Linux系统函数 - mmap分配 /munmap回收 (用户层)
——————————————————————
  kmalloc vmalloc 等  (内核层/系统层)
  Unix/Linux内存管理机制:
       虚拟内存地址 - 在Unix/Linux中,每个进程都有0-4G的虚拟内存地址(其实就是数字)。虚拟内存地址必须映射到物理内存/硬盘文件空间上 才能存储数据。如果虚拟内存地址 没有 映射物理内存/文件,会产生 段错误/总线错误。内存分配 就是 把一部分虚拟内存地址和物理内存 映射起来。程序员看到的都是 虚拟内存地址。
  其中0-3G是用户使用的,叫用户空间,3G-4G是操作系统使用的,叫内核空间。用户空间不能直接进内核空间,但可以通过 系统函数(系统调用) 进入内核空间。
  内存的分配和回收不是 以 一个字节作为单位,以 一个内存页(4096字节 4k) 作为单位。
  Unix/Linux的进程和程序:
   程序 就是 可执行的文件(硬盘上的)
   进程 就是 正在运行的程序(内存中的)
   内存针对的是进程,进程内存空间的组成:
   1 代码区 - 存函数的代码,函数所在区,只读区
   2 全局区 - 存全局变量和static变量 读写区
   3 BSS段 - 存未初始化的全局变量,在main执行前bss段 自动清0.
   4 栈区 - 局部变量,函数参数,内存自动管理
   5 堆区 - 自由区,malloc new分配的内存,堆区的内存用 free/delete 回收,否则内存泄漏。
   注:代码区附近有一个 常量和字符串常量区,存常量和字符串字面值("aa"),也是 只读区,但 并入代码区。

unix c 02的更多相关文章

  1. 【Linux】一步一步学Linux——Unix发展史(02)

    目录 00. 目录 01. 请参考Unix传奇 02. 03. 00. 目录 @ 本博客后面会更新 01. 请参考Unix传奇 链接: https://coolshell.cn/articles/23 ...

  2. 常见的操作系统及linux发展史

    目前我们常见的操作系统有: 1> 桌面操作系统 Windows 系列 用户群体大 macOS 适合于开发人员 Linux 应用软件少 2> 服务器操作系统 Linux 安全.稳定.免费 占 ...

  3. linux介绍、命令(基本命令、常用命令、使用方法、基本格式)

    操作系统(科普章节) 目标 了解操作系统及作用 1. 操作系统(Operation System,OS) 一个例子说明操作系统 操作系统作为接口的示意图 没有安装操作系统的计算机,通常被称为 裸机 如 ...

  4. # 2017-2018-1 20155337《信息安全系统设计基础》第5周学习总结+mybash

    2017-2018-1 20155337<信息安全系统设计基础>第5周学习总结 教材学习内容总结 不论我们是在用C语言还是用JAVA或是其他的语言编程时,我们会被屏蔽了程序的机器级的实现. ...

  5. Unix目录结构的来历

    作者: 阮一峰 Unix(包含Linux)的初学者,常常会很困惑,不明白目录结构的含义何在. 举例来说,根目录下面有一个子目录/bin,用于存放二进制程序.但是,/usr子目录下面还有/usr/bin ...

  6. UNIX常用命令

    以下只说明各常用指令的基本用法, 若需详细说明, 请用 man 去读详细的 manual. 1.关於档案/目录处理的命令 ls--列目录 这是最基本的档案指令. ls 的意义为 "list& ...

  7. Unix目录结构的来历(转)

    原文:http://www.ruanyifeng.com/blog/2012/02/a_history_of_unix_directory_structure.html Unix(包含Linux)的初 ...

  8. multiple definition of `err_sys' 《UNIX环境高级编程》

    本文地址:http://www.cnblogs.com/yhLinux/p/4079930.html 问题描述: [点击此处直接看解决方案] 在练习<UNIX环境高级编程>APUE程序清单 ...

  9. Linux/UNIX 定时任务 cron 详解

    定时任务( job)被用于安排那些需要被周期性执行的命令.利用它,你可以配置某些命令或者脚本,让它们在某个设定的时间内周期性地运行.cron 是 Linux 或者类 Unix 系统中最为实用的工具之一 ...

随机推荐

  1. linux虚拟机命令行模式下,某些命令显示乱码问题。

    刚安装了linux虚拟机,使用vi命令试着修改IP配置,结果出现乱码.配置IP的文件内容本身没有乱码,主要是vi编辑的命令行的提示出现乱码,例如,按i是插入模式,结果底下出现乱码提升,不是提示插入. ...

  2. java servlet+jquery+json学习小例子

    引入JSON的jar包: 注意,如果包不全,页面请求servlet时,jquery ajax会返回error:function 弹出error occured!!! HTML Code: <%@ ...

  3. MVC 区域模块

    mvc4.0新增的area区域机制,可以协助你在架构较为大型的项目,让独立性较高的部分功能独立成一个MVC子网站,以降低网站与网站之间的耦合性,也可以通过area的切割,让多人同时开发同一个项目时候, ...

  4. C# 图结构操作

    仿造<<Java常用算法手册>>里面对的算法,使用C#实现了一遍. 理论知识我就不讲解了,在这本书里面已经写的非常完美! 代码如何下: using System; using ...

  5. PyCharm常用设置

    pycharm,优秀的python开发工具 本文介绍一点python开发工具,pycharm的使用方式. 内容仅仅为最常用的几点,想要了解更多,请自行谷歌. 1.常用工具栏 唤出常用工具栏,View ...

  6. python:学习defaultdict,namedtuple

    # -*- coding: utf-8 -*-__author__ = 'Administrator'import bisect#排序说明:http://en.wikipedia.org/wiki/i ...

  7. 有关JAVA基础学习中的集合讨论

        很高兴能在这里认识大家,我也是刚刚接触后端开发的学习者,相信很多朋友在学习中都会遇到很多头疼的问题,希望我们都能够把问题分享出来,把自己的学习思路整理出来,我们一起探讨一起成长.    今天我 ...

  8. Windows7 32位机上,OpenCV中配置GPU操作步骤

    1.  查看本机配置,查看显卡类型是否支持NVIDIA GPU: 2.  从http://www.nvidia.cn/Download/index.aspx?lang=cn下载最新驱动并安装: 3.  ...

  9. Qt Mac 下软件Release 公布dmg

    1.首先当然是用Qt Creator.编译一个Release版本号的软件 注意到编译出来的大小非常小,才420KB,由于一些类库还没包括进去的原因.如今还仅仅能在你本地执行,复制到其它Mac电脑就不能 ...

  10. install-file -Dfile=J:\project01\workspace\service\lib\javapns-jdk16-163.jar -DgroupId=org.json -Dar

    今天在开发项目的时候发现了一个问题,所以通过博客来记录起来! 为了以后在问题的解决方面能得到借鉴! 问题的现象是这种: 这样会报错的.pom.xml文件他在编译.检查他的文件语法的时候是须要參考库中的 ...