C语言命令行传参
命令行传参命令行传参函数原型为int main(int argc, char *argv[])或者int main(int argc, char **argv),其中argv是参数个数,argv是实际传参。
#include <stdio.h>int main(int argc, char *argv[]){ for(int i = 0; i < argc; i++) printf("No.%d parm is %s\n", i, argv[i]); return 0;}
编译运行由运行结果可以看到,第一个参数为程序名称,在处理命令行参数的时候要注意从第二个参数开始才是真正需要处理的参数
$gcc -o test test.c $./test hello worldNo.0 parm is ./testNo.1 parm is helloNo.2 parm is world
命令行参数处理函数查询man手册,c语言提供了下面几个命令行参数处理函数,下面给出函数原型和所在头文件。
#include <unistd. ...
Ubuntu交叉编译Bluez
交叉编译均在Ubuntu 22.04环境操作
交叉编译前准备目录结构 由于bluez编译过程中依赖项比较多,所以创建一个文件夹,作为编译目录,文件目录结构如下
bluez-cross-complier/├── download #源码下载在此处操作└── output #编译产物输出到此目录└── source-code #源码存放目录
源码下载BlueZ Readline Ncurses D-Bus Expat Glib Zlib libffi gettext
cd bluez-cross-complier/download/wget http://www.kernel.org/pub/linux/bluetooth/bluez-5.66.tar.xzwget ftp://ftp.cwru.edu/pub/bash/readline-8.2.tar.gzwget https://ftp.gnu.org/gnu/ncurses/ncurses-6.4.tar.gzwget https://dbus.freedesktop.org/releases/dbus/ ...
C语言使用syslog
syslogd和klogdsyslogd是Linux系统日志守护进程,负责接收、记录和分发系统日志,通常配合/etc/syslog.conf使用。klogd是Linux内核日志守护进程,符合收集和处理内核信息,通常配合syslogd使用,但是也可以独立使用。
配置文件解析配置文件的语法: facility.level actionfacility: 标识符
kern 内核信息,首先通过 klogd 传递; user 用户进程; mail 邮件; daemon 后台进程; authpriv 授权信息; syslog 系统日志; lpr 打印信息; news 新闻组信息; uucp 由uucp生成的信息 cron 计划和任务信息。 mark syslog 内部功能用于生成时间戳 local0~local7 与自定义程序使用* 通配符代表除了 mark 以外的所有功能
level: 日志等级
syslog 级别如下:(按严重程度由高到低的顺序列出了所有可能的优先级。) emerg 或 panic ...
1.从零开始学Linux内核源码 - 源码下载及配置编译
所有操作均是linux-6.8.2版本
kernel源码下载
官方网站
linux-6.8.2
kernel目录结构
目录说明
目录
说明
arch
包含了各种不同的CPU体系架构的代码,如果ARM、x86、MIPS等
block
包含块设备相关的代码
crets
包含了用于签名和验证内核模块的证书文件和工具
crypto
包含加密相关的代码
Documentation
包含了内核的文档,包括各种文档、注释和帮助文件
drivers
含了设备驱动程序的源代码,如输入输出设备、网络设备等
fs
包含了文件系统相关的代码,如 ext4、NTFS、FAT 等
include
包含了一些头文件,用于引入定义和声明
init
包含了启动和初始化代码
io_uring
包含了与 io_uring 框架相关的代码
ipc
包含了进程间通信相关的代码
kernel
包含了内核的核心代码
lib
包含了一些通用的函数库
mm
包含了内存管理相关的代码
net
包含了网络协议栈相关的代码
rust
引入了一些rust特性
samp ...
Ubuntu交叉编译环境配置
安装依赖下面是arm/mips在ubuntu 22.04上常用的依赖项
sudo apt-get update sudo apt-get install gcc g++ binutils patch bzip2 flex bison make autoconf gettext texinfo unzip sharutils subversion libncurses5-dev ncurses-term zlib1g-dev subversion git-core gawk asciidoc libz-dev zlib1g-dev libssl-dev pkg-config unzip zlib1g-dev libc6-dev libncurses5-dev gawk sharutils curl libxml-parser-perl ocaml-nox ocaml ocaml-findlib libssl-dev libfdt-dev quilt device-tree-compiler u-boot-tools lsb-core lib32z1 cmake mtd-util ...
音频编解码
PCM - 脉冲编码调制(PulseCodeModulation)奈克斯特-香农采样定理:采样频率大于2倍的最大频率,才能最大限度的还原出模拟信号。PCM是一种数字音频编码方式,用于将模拟信号转换为数字信号。在PCM编码中,模拟信号按照一定的采样频率进行采样,并通过量化和编码转换为数字信号。PCM数据可以直接送进DAC进行播放。
音频参数
采样率(Sample Rate):采样率是指每秒钟对声音信号的采样次数,以赫兹(Hz)为单位。常见的采样率包括 44.1kHz(CD音质)、48kHz(DVD、蓝光音质)、96kHz(高清音质)等。采样率越高,能够记录的声音频率范围也就越宽,音质也就更好,但相应的文件大小也会增加。
位深度(Bit Depth):位深度表示每个样本的量化精度,通常以比特(bit)为单位。常见的位深度包括 16位、24位和32位浮点数。位深度越高,可以表示的动态范围就越大,音频的细节表现也更丰富,但文件大小也随之增加。
什么是位深度
声道数(Channels):声道数表示音频文件中包含的独立声道数量,常见的有单声道(mono)和双声道(stereo)。多声道 ...
Linux系统时区设置
UTC、GMT、CST、DST以及Unix时间戳UTC - 时间标准时间 全球通用的时间标准,是一堆大佬根据原子钟和地球自转计算出来的。
GMT - 格林威治时间 规定太阳每天经过位于英国伦敦郊区的皇家格林威治天文台的时间为中午12点。
GMT是前世界标准时,UTC是现世界标准时。UTC以原子时计时所以比GMT更精确,但是日常生活中精确到秒的情况下,二者可以视为相同
CST - Central Standard Time 可同时代表4个时区:美国中部、澳大利亚、中国和古巴。
Central Standard Time (USA) UT-6:00Central Standard Time (Australia) UT 9:30China Standard Time UT 8:00Cuba Standard Time UT-4:00
DST - 夏令时 为了节约能源,提高日光利用率,夏季太阳升起较早人为将时间调快一个小时,夏令时切换当天一天只有23个小时,同时冬令时切换当天,一天有25个小时
Unix时间戳 UNIX时间戳是UTC时间,从1970年01月01日00时00分00秒到 ...