zoukankan      html  css  js  c++  java
  • unix c 02

    环境变量 - 存储在内存中的信息,格式是映射,作用就是 帮助系统 进行一些工作,一般是 查找某个东西。
    预处理指令:#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"),也是 只读区,但 并入代码区。

  • 相关阅读:
    Spring Cloud(4):断路器(Hystrix)
    Spring Cloud(3):配置服务(Config)
    Spring Cloud(2):服务发现(Eureka)
    Docker常用命令
    Spring Cloud(1):概览
    Spring Cloud(0):目录
    Spring Boot JDBC:加载DataSource过程的源码分析及yml中DataSource的配置
    Java集合(7):散列与散列码
    [Linux]RabbitMQ
    [Linux]查看硬件及操作系统信息
  • 原文地址:https://www.cnblogs.com/elisha-blogs/p/3771102.html
Copyright © 2011-2022 走看看