码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Linux_API_系列-整体概览


    总论

    Linux下API编程不像Windows一样,对每种设备和不同功能都有统一的API,所以有了《Windows核心编程》这种导论一类的大而全的书籍,整本书厚的像一块砖头。
    在这里插入图片描述
    Linux下贯彻了一贯的“一切皆文件”的宗旨,所以对于系统编程而言,整体API算是非常少了。网上有很多大佬做过很多分析总结,或者参考《Linux系统高级编程》,很快就能大概得到整体概览。

    这里我提供一个网友做的在线Wiki作为参考:Linux API速查手册

    Linux基础API

    文件

    文件I O

    • 基于文件描述符

    • open

    • read

    • write

    • lseek

    • fcntl

    • dup

    • 基于数据流 ANSI C

    fopenfclose
    fwritefread
    fputcfgetc
    fputsfgets
    feofferror
    fseekrewind
    ftell

    文件与目录

    • 文件操作

    • chown

    • rename

    • stat

    • dirname

    • basename

    • 目录操作

    • getcwd

    IPC 进程间通信

    1. 管道

    pipemkfifo

    2. 信号处理

    • 信号类型
    • psignal
    • kill
    • raise
    • signal
    • sigaction
    • 信号阻塞
    • sigsuspend
    • sigalstack

    3.1 IPC对象 System V

    消息队列信号量共享内存
    msggetsemgetshmget
    msgctlsemctlshmctl
    msgsndsemopshmat
    msgrcvshmdt

    3.2 IPC对象 POSIX

    • 消息队列
    • 信号量
    • 共享内存

    4. 网络编程

    套接字结构套接字函数
    字节序转换地址转换
    主机服务
    • 带外数据
      • sockatmark

    并发编程

    1. 进程控制

    forkvfork
    exec~system
    waitwaitpid

    2. 多线程

    • 基本编程

    • pthread_create

    • pthread_exit

    • pthread_join

    • 线程同步

    • 互斥锁

    • 条件变量

    • 读写锁

    • 线程信号

    • POSIX信号量

    3. IO多路复用

    • select BSD
    • poll System V
    • epoll模型
      • epoll_create
      • epoll_ctl
      • epoll_wait

    4. 异步IO(AIO)

    其他

    时间与定时

    ANSI CPOSIX
    timegettimeofday
    difftimegetitimer
    localtime
    ctime

    系统管理

    函数描述
    uname得到内核的名称和信息
    getpwuid通过uid获得相应的结构体passwd
    getpwnam通过用户名获得相应的结构体passwd
    getspnam通过用户名获得结构体spwd(内包含密码)
    getgrgid通过gid获得相应的结构体group
    getgrnam通过组名获得相应的结构体group
    getenv获取系统环境变量的值

    命令行

    • getopt

    Linux Video

    Linux下设备没有统一的API进行管理,但是Linux的设备驱动注册有统一的逻辑。如果是按照驱动标准编写的设备,根据Linux驱动原理,会在/dev/class/xxx对应位置产生设备文件描述符,通过这里就可以得到所有对应的类型的设备。

    依据这个原理,我们就可以查看系统设备信息,然后遍历设备详细信息。

    对于Video设备而言,当然可以通过基础API open等相关函数直接操作,但是太过低效和复杂,所以有了video for linux2 (v4l2)的软件内核驱动,通过它可以简单地操作视频设备。

    参看 V4L2摄像头应用编程

    https://img-blog.csdnimg.cn/21dba90a20a14cb88612e08d1d9cdbeb.png
    https://img-blog.csdnimg.cn/e5b8f35c9a744e63881df9afc27d78c8.png

    Linux Audio API

    Linux声音系统有些混乱,它有三套音频驱动: OSS (Open Sound System), 商业版的OSS,和ALSA (Advanced Linux Sound Architechture)。 所以底层驱动有OSS和ALSA两套API。

    +----------+--------------+--------------------+---------+
    |设备类型  |    OSS       |  ALSA              | 备注    |
    +----------+--------------+--------------------+---------+
    |声音采样  |   /dev/dsp0  | /dev/snd/pcmC0D0   |         |
    +----------+--------------+--------------------+---------+
    | 混音器   |  /dev/mixer0 | /dev/snd/mixerC0D0 | 控制音量|
    +----------+--------------+--------------------+---------+
    |高层音序器|  /dev/music0 |    N/A             | MIDI支持|
    +----------+--------------+--------------------+---------+
    |低层音序器|  /dev/midi0  |    N/A             | MIDI支持|
    +----------+--------------+--------------------+---------+
    |声音状态  |  /dev/sndstat|    N/A             |         |
    +----------+--------------+--------------------+---------+
    |控制文件  |   N/A        | /dev/snd/controlC0 |         |
    +----------+--------------+--------------------+---------+
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    ALSA提供了和OSS不同的API,因此如果你使用ALSA做音频驱动, 一些通过OSS操作声音的程序将不能正常发声。

    为了解决这一问题,ALSA提供了兼容OSS的库, 因此,如果你使用 ALSA 驱动声卡,也安装了兼容OSS的库, 那些使用OSS API的程序也能正常工作。

    Linux 音频开发之入门篇

    应用程序和声卡驱动的交互方式

    直接和底层声音驱动打交道

    有一些应用程序直接和最底层的声音驱动(OSS_或_ALSA)打交道, 程序内部直接调用 OSS 或 ALSA 的API。

    通过声音服务器

    声音服务器介于应用程序和声卡驱动之间。 当不同的应用调用声音服务器的API来播放声音时,它们把音频数据送到服务器, 服务器将一个以上的播放请求混音后,再发送给底层的声卡驱动(ALSA_或_OSS)。 由_ALSA_或_OSS_来驱动声卡播放混音后的数据。 基于_ESD_开发音频程序的好处有:(1)简化开发。(2)即使底层驱动不支持多线程, 通过声音服务器也能实现多个应用程序同时发声。(3)有更好的音效。

    1. ESD
      ESD
      一直是 Gnome 桌面环境的声音服务器, Gnome 应用多是通过 ESD 处理声音的。
    2. aRts
      和 ESD 对应,aRts 是 KDE 桌面环境的声音服务器, 底层通过 ALSA 驱动声卡。KDE 应用多通过 aRts 处理声音。
    3. PulseAudio
      PulseAudio_是新一代声音服务器,能提供更好的音效, 已经有越来越多的应用通过_PulseAudio_处理声音。 为了让使用_ESD_的程序能继续在_PulseAudio
      上工作, PulseAudio 提供了 ESD 的兼容层。 Gnome 未来将采用_PulseAudio_取代_ESD_。
    通过其它库

    除了声音服务器,为了简化开发,还出现了其它的一些声音库。 这些声音库有的和声音服务器打交道,有的直接和最底层的声音驱动(OSS_或_ALSA)打交道。 比如游戏程序使用的_SDL_库,就是直接和声音驱动打交道。

    所以,audio比video更混乱,一般使用ALSA框架处理,或者更高阶的PulseAudio进行。
    ALSA Layer比较复杂,功能不足,推出了ASoC
    PipeWire 是未来的大统一方案,但是还是太新了。

    总结: 在乎性能和功能,直接选择ALSA, 否则可以尝试PulseAudio/PipeWire。

    Linux USB API

    Linux下USB也没有HIDAPI一类的库,目前也没有官方一点的标准框架,只有libusb这个跨平台的第三方库。

    参看:

    • https://blog.csdn.net/whstudio123/article/details/104348736
    • https://www.kernel.org/doc/html/latest/driver-api/usb/usb.html#introduction-to-usb-on-linux
    • https://blog.csdn.net/qq_27149449/article/details/119704387
  • 相关阅读:
    Linux网络(1)——配网络3招(配置DHCP、配置固定IP、配置DNS)
    ELK企业级日志分析系统
    OpenHarmony后代组件双向同步,跨层级传递:@Provide装饰器和@Consume装饰器
    源码解析FlinkKafkaConsumer支持punctuated水位线发送
    护眼灯到底有用吗?保护孩子视力护眼灯推荐
    Zabbix自定义监控项与触发器
    【JavaEE初阶】 JavaScript基础语法——壹
    支撑向量机
    Unity中的AI算法和实现1-Waypoint
    基于CentOS8操作cobbler批量装机
  • 原文地址:https://blog.csdn.net/bbdxf/article/details/133944557
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号