Linux基础知识(Day12)

零 补充
    vim 补全:
    ctrl + n
    
    vim 窗口切换
    alt + 数字 

    ld 是链接器
    
    查找文件中的某一个函数:
    在视图模式下:
    输入 /xxxx
    
    快捷键:
    高亮某一个函数或者变量:
    shift + # 
    n / N 查找上一个/下一个
    
一 回忆昨天的内容
    
    计算语言的发展史

    静态库的制作和使用
    ar -r     .a  *.o 
    每使用一次,在内存中拷贝一份。
    静态链接在链接的时候,会链接到实际的代码。
    
    环境变量
    name=value
    env 
    env | grep "xxxx"
    
    PS1 命令行的提示符  PS1='\W\$'
    PATH 环境变量 
    告诉编译器去哪里找命令,库文件,运行时文件
    
    动态库的制作和使用
    gcc -shared -o lib + 库名.so *.o
    
    在运行时链接动态库,链接的时候不发生实际链接
    gcc -fPIC 
    与位置无关
    gcc a.out -LImath.so -v
    ldd a.out
    /bin
    在内存中只有一个备份
    _start 
    main
    __init_xxx
    __fnin__xxx


    
二 动态加载
    
    按需加载 
    malloc 动态申请内存   堆区 
    Linux提供了一系列的动态加载的库函数
    
    dlopen (3)
     void *dlopen (const char *filename, int flag);
    功能
     打开一个共享库
    参数
     filename 指定了要打开的共享库的文件名
     flag 
             RTLD_LAZY 懒加载 只有函数被执行的时候,才去加载。
             
             RTLD_NOW  立即加载 在函数返回之前,
                所有符号的位置都被确定下来了。 
                
    返回值
        NULL 调用函数失败
        非NULL 成功
            
    dlclose 
    功能: 
        关闭共享库,引用计数减一。
    参数:
        handle: dlopen 的返回值,
        指定了要关闭的共享库的地址。
        
    返回值:
            成功 0
            错误 非0        
    
    gcc dynamic.c -ldl
    a.out 
    a.out libImath.so //命令行传参 
    ldd a.out
    
    dlerror (3)
    功能:
        获取dlopen API错误信息
    参数:
        void
    返回值:
        成功 返回错误信息的字符串
        错误 代表没有错误发生,因为本身就是在检查错误
    
    dlsym (3)
    功能:
        获取一个共享库中符号加载到内存中的地址。
    
    参数:
        handle: 指定了共享库,在共享库中查找symol
        symbol: 指定了要查找的函数
    
    返回值:
        成功 返回要查找的函数加载到内存中的地址
        失败 返回NULL 失败原因也可以由dlerror诊断(获取)
        
    代码参见 dynamic.c 
    gcc dynamic.c -ldl
    ./a.out libImath.so 
    nm a.out ---> 已经看不到p_add的影子了
    
三 系统中的错误处理
    在系统中有一个全局变量 errno
    
    errno (3) 
    当库函数和系统调用产生错误的时候,
    由errno记录错误信息。
    可以通过错误编号,了解错误信息
    
    举例说明:文件的操作
    参见file.c
    gcc file.c    
    a.out hello //报错
    a.out file.c 
    touch hello 
    a.out hello
    chmod a-r hello
    a.out hello //报错
    两次报错的原因不一样
    
    errno 是错误的编号,找到错误的编号,就找到错误的信息。
    如何找到错误的信息:
    perror (3) 
    strerror (3) 
    
    strerror 
    功能
        描述错误码的具体信息
    参数
        errno
    返回值
        具体信息的字符串
    
    perror 
    功能:
        打印一条系统的错误信息
    参数:
        自己指定的字符串
    返回值:
        void
    
四 文件夹的操作
    mkdir Wilhelm
    chmod a-r Wilhelm 
    ls -al Wilhelim  //权限不够
    
    x ---> "可通过" 
    删除x权限,不能进入文件夹
    
    打开文件夹
    opendir (3)
        功能:打开一个文件夹
        参数:要打开的文件夹的名字
        返回值:
            成功 返回指向文件夹流的名字
            错误 NULL 
            
    readdir (3) 
       功能:在文件夹中搜索一个条目
       参数:dirp 指向文件夹流
       返回值:
       成功 返回一个地址,指向文件夹流的下一条地址
       错误 NULL 到文件夹流的末尾 或者 一个错误
    
    closedir (3)
         功能:关闭一个文件夹流
         参数:dirp 指向文件夹流
         返回值:成功返回 0
                          错误返回 -1 
    
    举例说明:
    遍历文件夹                      
    
       

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值