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"),也是 只读区,但 并入代码区。

  • 相关阅读:
    NetSuite Batch Process Status
    NetSuite generated bank files and the Bank Reconciliation process
    Global Search file content in Gitlab repositories, search across repositories, search across all files
    FedEx Package Rate Integration with NetSuite direct integrate by WebServices
    git Merge branches
    git tag and NetSuite deployment tracking
    API 读写cookie的方法
    C# 生成缩略图
    解决jquery操作checkbox全选全不选无法勾选问题
    JS读取写入删除Cookie方法
  • 原文地址:https://www.cnblogs.com/elisha-blogs/p/3771102.html
Copyright © 2011-2022 走看看