zoukankan      html  css  js  c++  java
  • 精通UNIX下C语言编程与项目实践

    cc 

    -I  //include 目录

    -L //静态库目录?动态也可以

    -l //小写L,接静态库名称?动态也可以

    -DXXX=‘“XXFF”’ //-D直接定义宏

    -c 只编译

    -O 优化

    -g 生成调试信息

    splint , gprof, cflow , dbx , gdb ,sdb //除了工具,还有日志记录调试更便捷

    动态库:隐式调用 自动加载,与静态库一致 使用时,cc 后面加上路径,接口不变可以直接换so文件

    显示调用 用dlopen

    动态库创建:位置无关码(PIC)型.o

    gcc -O -shared -shared -o xxx.so xxx.c 

    LD_LIBRARY_PATH  //LINUX下设置这个环境目录,放动态库

    #include <dlfcn.h> dlopen() / dlsym()

    显示调用动态库流程 

    gcc -O -o tds tds.c -ldl //-ldl 固定写法 显示调用动态库时用

    二、文件系统

    超级块结构 filsys.h ; i node  ino.h ;文件属性 stat.h ; 

    termio.h struct termio ioctl()

    三、并发程序设计

    sysproc //标识号0 调度系统中运行的进程, init // 标识号为1 

    geteuid() 进程有效用户ID,getegid() 进程有效组ID

    fork-exec;vfork-exec模型

    system() == vfork-exec

    wait 实现父子进程之间同步:函数wait挂起调用它的进程,直到它的任一子进程退出

    waitpid wait加强版 <sys/wait.h>

    避免僵死进程 :fork两次让子进程退出,子子进程的父进程更改为进程init

    四、进程通信

    popen()  pclose 

    mkfifo/mknod k1 p 有名管道用文件操作调用使用

    消息对列是UNIX内核中一个先进先出链表结构

    狭义讲IPC特指消息对列,信号量,共享内存

    ipc /ipcrm   <sys/msg.h> struct msqid_qs 

    int msgget(key_t key,int msgflg); //创建消息队列

    msgsnd/msgrcv //消息发送和接收

    msgctl

    信号量:sem.h semid_ds sem

    int semget(key_t key,int nsems,int semflg) 

    semctl 信号量控制

    semop() // P ,V ,Z(进程阻塞直到信号量为0)

    共享内存:创建(shmget),映射(shmat),读写,释放(shmdt)  

    shmctl

    五、网络通信

  • 相关阅读:
    关于Excel无法打开,因为文件格式或文件扩展名无效的解决方法
    SpringBoot整合rabbitmq
    异步线程池的使用
    java1.8新特性之stream流式算法
    hashMap的底层实现
    redis底层设计(五)——内部运作机制
    redis底层设计(四)——功能的实现
    redis底层设计(三)——redis数据类型
    redis底层设计(二)——内存映射数据结构
    redis底层设计(一)——内部数据结构
  • 原文地址:https://www.cnblogs.com/anjsoft/p/3278666.html
Copyright © 2011-2022 走看看