C++的跨平台(Linux)开发——总结

29 篇文章 5 订阅
23 篇文章 1 订阅

  • 设备和文件IO
    • Linux 内核函数
      • 内核函数和API区别(fopen、open) 
        • API函数通过库函数 进行操作
        • 内核直接操作硬件
        • 从效率上:内核函数比库函数快
        • 从移植性上:内核几乎无法跨操作移植,库函数比较方便
    • 文件操作
      • open函数
      • read函数
        • 阻塞式函数——没读取到内容是不会往下执行的
      • wirte函数
      • create函数
      • close函数
      • lseek函数
      • fcntl函数
    • 文件夹操作
      • mkdir 函数
      • rmdir 函数
        • 针对空文件夹——有数据或者其他文件就不能删除
    • 业务场景
      • 文件读写
      • lseek 文件拆分
      • 多线程操作同一个文件 fcntl文件锁 ——文件锁会被绕过,现在很少用,而是用线程锁
    • 面试问题
      • 文件操作流程
      • 内核函数和API区别
      • 什么是阻塞式函数
  • 进程管理
    • 什么是进程
      • PID是什么
      • PCB是什么
    • 进程的状态
    • init进程
    • fork 函数
      • 作用:开辟新的子进程
      • 过程:一次调用,两次返回(父子进程)
      • 父进程 pid>0  子进程pid==0
      • 代码拷贝,多进程中数据,地址一直,数据独立不能数据共享
      • 注意:多进程中的数据如果全局变量地址是一样的,数据是独立的
    • 业务场景
      • 前后置服务器
      • 守护进程(心跳 ——后台看不见,比如微信看完切换到qq,这时候微信这个进程就存在守护进程里)
    • 面试问题
      • 进程和线程关系和区别
      • 进程状态切换问题
      • 进程的结束问题(exit(结束状态码)——子进程调用,主进程会收到状态码。如果主进程先结束,子进程就托孤,系统没人管)
      • 进程和程序的关系()
  • IPC进程间通信
    • 管道
      • 半双工(数据单向流动)
      • 匿名管道PIPE
        • 存在于父子、兄弟进程间(有亲缘关系进程)
      • 命名管道FIFO
        • 没有关系的多个进程之间
        • 存在一个管道文件(容易被误删)
    • 信号
      • 什么是信号(信号发出,执行绑定的函数——类似qt信号和槽)
      • 信号的分类
        • 可靠信号(34只会,发多少执行多少)
        • 不可靠信号(1-31-循环发送多次信号,就只会到达一两个)
      • 代码去实现
        • 不可携带数据signal
        • 可携带数据 sigaction(int类型)
      • 信号屏蔽 sigprocmask
        • 同种排队,异种中断
      • 信号冲突问题

    • 消息队列
      • 链表的形式存在
      • 每一个消息都可以携带数据
      • 数据是存在一定的顺序——先进先出
        • 链表尾部追加、头部删除
      • 读取一个消息,会自动删除链表的头(最早的消息)
      • 代码实现
        • msgget 消息队列创建和访问
        • msgsend 发送消息
        • msgrcv 接收消息
        • msgctl 控制消息队列
          • 删除
    • 共享内存(跟消息队列、信号量 是三剑客 不属于进程,进程可以共享)
      • 多个进程中可以共享的一块内存区域
      • 不属于任何进程
      • 所有的进程都可以操作
      • 后一个访问者可以查看到前一个访问操作的结果
      • 代码实现
        • shmget 创建和访问
        • shmat 连接进程
        • shmdt 断开进程连接
        • shmctl 控制共享内存
          • 删除
    • 信号量
      • 多个进程间访问同一数据 进程锁操作 通知操作
      • 代码实现
        • semget 创建
        • semop 一次pv操作
        • semctl 信号量控制
          • 删除
    • 业务场景
      • IPC通信管理
        • 数据传输(适合:共享内存、管道、消息队列)
        • 数据共享(共享内存,有指向性不能共享)
        • 通知事件(消息队列、信号、信号量)
        • 进程锁同步机制(信号量——进程锁——pv操作)
    • 面试问题
      • 不同的IPC技术的运用场景(能用和适用用)
  • socket 网络通信(与前面不一样的是使用了网络)
    • 网络基础概念
      • IP地址
        • 作用:找到网络中特定的主机
      • 端口
        • 确定应用程序
      • 通信协议
        • TCP
          • 1、验证通信双方是否在线
          • 2、流式IO传输,不会限制大小
          • 3、键链三次握手;断线四次挥手
          • 牺牲效率,提高数据安全
        • UDP
          • 1、不需要验证通信双方是否在线的情况
          • 2、报文包传输,每一包64KB大小
          • 3、发送报文包
          • 牺牲部分数据安全,提高传输效率
        • 自定义通信协议
          • 协议头
          • 协议体
      • 局域网
      • 广域网
      • 域名
    • 代码实现
      • 服务器
        • socket 函数
        • setsockopt函数——端口重用
        • bind 函数
        • listen 函数
        • accept 函数
      • 客户端
        • socket
        • connect
    • 面试问题
      • TCP和UDP区别
      • xxx业务需要使用什么通信协议实现,为什么
      • 三次握手四次挥手流程
  • socket IO复用
    • 为什么需要IO复用
      • 为了实现高(客户端的访问数量高)、并发(数据量大)
    • 阻塞式IO
    • 非阻塞式IO
    • 多线程IO
    • 多路复用IO
      • select
        • 1、socket数组
        • 2、轮询遍历所有的socket
      • Poll——链表——仍然要遍历
      • epoll
        • 2、使用事件队列的方式,边缘触发
        • 3、选择某一个触发了事件的socket到进程中执行操作
        • Epoll——异步阻塞(所有socket全部处于阻塞状态,事件发生了才会处理read),同步执行(socket产生事件之后,唤醒主进程操作,主进程处于同步等待状态,epoll_wait,产生事件才能read,没有事件到达一直wait,(搭线程池的原因),从wait角度来说是同步的,从事件队列红黑树来说是异步阻塞

Wait后交给线程池处理又变成异步的了)

没有事件到达之后就一直阻塞,事件到达之后就变成同步执行

  • 没有多线程之前,都是同步,有了之后变成异步(read——同步,读取到数据才往下走)
    • 异步:我做的事情跟你无关,一个客户端登录登录不上,不影响其他线程处理业务
    • 业务场景
      • 前置服务器开发
    • 面试问题
      • select \poll和 epoll区别
      • epoll原理
      • epoll封装步骤
      • LT模式和ET模式
  • 线程池
    • 为什么需要线程池——减少创建和销毁线程的次数——减少内存和cpu的消耗
    • 代码实现
      • 任务队列
      • 空闲线程队列
      • 忙碌线程队列
      • 线程数量最大值 MAX 最小MIN
      • 线程条件变量
        • 线程等待
        • 线程唤醒
      • 线程访问同一数据的安全问题
        • 互斥量

两个进程,用了进程锁和线程锁,哪个优先级更高——进程锁

线程包含在进程内,线程锁是用在同一个进程有两个或者多个线程,解决进程内部问题

进程锁一定是进程与进程之间的访问

  • 面试问题
    • 什么业务场景需要线程池(复杂的用模板)
    • 线程池设计
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: C跨平台开发技术指南PDF是一本介绍跨平台开发技术的PDF电子书。跨平台开发是指开发在不同操作系统或平台上都能运行的软件或应用程序。由于不同操作系统的底层架构和开发语言不同,跨平台开发技术成为开发者解决不同平台兼容性问题的有效方式。 这本指南提供了详细的跨平台开发技术解决方案和实践经验,帮助开发者理解和应用跨平台开发技术。指南首先介绍了跨平台开发的基本概念和原理,包括平台差异性、可移植性和兼容性等内容。然后,它详细介绍了几种常见的跨平台开发技术,如HTML5、React Native、Flutter和Xamarin等。 在介绍每种技术时,指南会提供相关的开发环境安装和配置教程,以及示例代码和项目实战经验。通过这些实例,开发者可以学习如何使用不同的跨平台开发技术来构建应用程序,从而提高开发效率和应用的用户体验。 此外,该指南还包括了跨平台开发常见问题和解决方案,如性能优化、调试技巧和用户界面设计等。这些内容可以帮助开发者在实际项目中避免常见问题,并更好地应对挑战。 总之,C跨平台开发技术指南PDF是一本有关跨平台开发技术的权威参考书,适用于想要了解和应用跨平台开发技术的开发者。通过学习指南中的内容,开发者可以更好地掌握跨平台开发技术,提高软件开发效率和应用程序的质量。 ### 回答2: 《c 跨平台开发技术指南 pdf》是一本介绍C语言跨平台开发技术的电子书籍。C语言是一种通用的编程语言,具有高效性和灵活性,在跨平台开发中应用广泛。 通过阅读该电子书,读者可以了解C语言如何应用于不同操作系统和平台上,实现跨平台开发。书中可能会介绍一些常见的跨平台开发工具和框架,例如Qt和CMake,通过使用这些工具,开发者可以更加方便地编写跨平台的代码。 此外,该书还可能涉及到一些跨平台开发中的注意事项和技巧,例如处理不同操作系统的差异性、处理文件路径问题等等。对于有一定C语言基础的开发者来说,这本书可以提供一些有关跨平台开发的实践经验和建议。 总之,《c 跨平台开发技术指南 pdf》是一本针对想要学习和实践C语言跨平台开发开发者们的指南,可以帮助读者更好地理解并应用C语言在各种平台上进行开发的技术。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ze言

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值