- 博客(56)
- 收藏
- 关注
原创 libudev 和 libusb 常见API分析
函数:udev_monitor_filter_add_match_subsystem_devtype(struct udev_monitor *udev_monitor, const char *subsystem, const char *devtype)参数是udev_monitor_new_from_netlink函数返回值。函数:udev_device_get_sysattr_value(struct udev_device *udev_device, const char *sysattr);
2023-09-02 15:32:06 2961
原创 curl 实现 https、ftp下载文件 代码
cURL 是一个网络数据传输项目,通常说 cURL 是指 curl 命令行工具,它支持 DICT、FILE、FTP、FTPS、Gopher、HTTP、HTTPS、IMAP、IMAPS、LDAP、LDAPS、POP3、POP3S、RTMP、RTSP、SCP、SFTP、SMB、SMBS、SMTP、SMTPS、Telnet 与 TFTP 等协议,而 curl 的底层使用的是 libcurl 库,libcurl 与 curl 组成了 cURL 项目。命令没问题的话我们源码编译安装成功,下面就可以写代码实现了。
2023-07-10 19:58:28 2673
原创 打印机语言监视器
语言监视器(Language Monitor)是一种Windows操作系统中的系统组件,它的主要作用是协调打印机驱动程序和操作系统之间的通信
2023-05-25 19:41:03 1587
原创 关于汇编 no instruction mnemonic suffix given and no register operands;can‘t size instruction 的报错解决方法
通过报错提示翻译我们知道问题是因为没有给出指令助记符后缀,也没有寄存器操作数;所以,我们来看代码,我的代码是这样写的(省略大部分代码,只看有问题的代码)
2023-04-20 11:21:42 563
原创 PJL命令详解
PJL(Printer Job Language)是一种打印机命令语言,是一种控制打印机行为的命令语言,用于在打印作业中控制打印机的状态,并向打印机发送指令。
2023-03-28 20:02:44 7034
原创 qmake: could not exec ‘/usr/lib/qt5/bin/qmake‘: No such file or directory 解决办法
qmake: could not exec '/usr/lib/x86_64-linux-gnu/qt5/bin/qmake': No such file or directory
2023-02-13 14:51:12 2287
原创 不小心把内核文件vmlinuxz覆盖了,系统启动不了怎么办?
最近在替换内核的时候,犯了一个错,把内核源码替换了,内核文件vmlinuxz文件也替换了,但是没有修改grub,导致系统在登录界面无法收到键盘鼠标的输入,即使在命令行模式键盘也无法输入。遇到这种情况该怎么办呢?
2022-12-28 14:44:50 315
原创 关于报错 error: unknown type name ‘va_list‘ 问题的解决方法
缺少头文件添加头文件 #include <stdarg.h>
2022-05-06 11:12:50 3547
原创 嵌入式-C语言常见面试/笔试题
【1】关键字类型题常见的关键字有 sizeof、static、const、volatile1、sizeof:通常与strlen做比较不同例1:char str[] = “Hello” ; char *p = str ; int n = 10;
2022-03-07 14:39:45 15195 9
原创 计算机网络-无线网络和移动网络
无线网络和移动网络在电话技术领域,蜂窝电话的数量比地球上的人口还要多。蜂窝电话的优点是显而易见的,通过一个移动性强、重量轻的设备,能够在任何地方、任何时间无缝地接入全球电话网络、而如今的智能手机、平板电脑等能够以无线的方式经过蜂窝网或WIFI网络连接到因特网。除此之外还有游戏机、家电、传感器等等越来越多设备以无线方式接入因特网。从网络观点来说,由这些无线和移动设备联网锁引发的挑战,特别是在数据链路层和网络层,与传统的有线网络差别非常大。所以有必要介绍一下有线网和无线网。一、概述1.无线网络的主要元素
2022-01-17 21:49:12 3463
原创 Web页面请求的历程(从应用层到链路层)
Web页面请求的历程前面从应用层到数据链路层都详细讲过了,现在回顾总结一下一个简单请求背后隐藏的秘密细节。下面假定一名学生bob下载web页面(www.baidu.com)如下图1.准备:DHCP、UDP、IP和以太网假定bob启动它的主机,然后用一根以太网电缆连接到学校的以太网交换机,交换机又与学校的路由器相连,学校的这台路由器又与一个ISP相连,本例中ISP未connect.net,它为学校提供了DNS服务,所以DNS服务器驻留在Comcast网络中而不是学校中,我们假设DHCP服务器运行在路由
2022-01-11 21:58:11 1814
原创 SQLite内部机制和新特性
SQLite内部机制和新特性一、B-tree和Pager模块B-tree为SQLite VDBE提供了O(logN)级时间复杂度的插入和查询,通过双向遍历记录实现O(1)级时间复杂度的删除。B-tree是自平衡的,能够对碎片清理和内存再分配进行自动管理。B-tree对如何读写磁盘没有限定,只是关注页之间的关系。B-tree在需要一个页或修改一个页的时候会通知Pager。修改页时,如果使用传统的回滚日志,pager首先将原始页复制到日志文件,同样,pager在B-tree完成操作时收到通知,并基于所处的
2022-01-04 09:43:59 953
原创 SQLite3扩展C API
扩展C API扩展API提供几种扩展或定制SQLite的基本方法,包括:创建用户自定义函数、聚合、排序规则和虚拟表,还可以在更底层实现一些方法,像虚拟文件系统,启动时可换的页缓存、内存分配和互斥的实现。用户自定义函数是用户编写的用于特定应用的SQL函数,可以在SQL语句中调用他们。聚合是一种特殊形式的函数,他与普通函数的工作方式基本相同,只是他对一组记录j进行操作并返回这一组记录中某个特定的字段的聚合值或表达式计算值,聚合函数可以从多个字段进行计算,而普通函数对单个记录进行操作。SQL中标准的聚合CO
2021-12-27 09:45:57 1320
原创 SQLite3中核心C API
核心C APISQLite3 有八个函数用于实际处理连接、处理查询以及断开数据库连接的。其余都是为了完成特定的任务一、查询封装通过封装查询对数据库进行连接、断开、以及查询。1.连接和断开执行SQL命令之前,首先要连接数据库(打开数据库),断开连接时候断开数据库。打开数据库函数:sqlite_open_v2()、sqlite3_open()、sqlite3_open16()。函数:int sqlite_open_v2(const char *filename, sqlite3 **ppdb, i
2021-12-22 09:53:35 2280
原创 计算机网络自顶向下-链路层
链路层和局域网两台主机之间,数据报跨越一系列通信链路传输,一些是有线链路一些是无线链路,从源主机起,通过一些了分组交换机在目的主机结束。在链路层中有两种不同的链路层信道,第一种是广播信道,这种信道用于有线局域网、卫星网、和混合光纤同轴电缆接入网中的主机。因为许多主机与相同的广播信道连接,所以需要所谓的媒体访问协议来协调帧传输。在一些情况下可以使用中心控制器来协调传输。第二种是链路层信道是点对点通信链路,在长距离链路连接的两台路由器之间,或用户办公室计算机与他们所连接的邻近以太网交换机之间等场合
2021-12-16 23:39:37 1401
原创 SQLite设计与概念
SQLite设计与概念了解了SQLite设计与概念有助于了解SQLite API和一些SQLite架构和实现方面的内容,掌握之后可以更好的编写代码、使得代码运行速度变快、避免死锁等。出来了解API做什么的之外,还需要从整体上了解API,从事务的角度来了解他们是如何运作的。SQLite数据库的所有操作都是在事务上下文完成的,因此需要了解API背后的东西,从锁的角度理解事务是如何工作的。一、API从功能上讲API可分为两部分:核心API和扩展API,核心API用于基本的数据库操作,如:连接数据库、处理S
2021-12-13 11:21:46 1629
原创 计算机网络自顶向下-网络层
一、简述在网络中每一台主机和每一个路由器都会有一个网络层部分。所以网络层是最复杂的协议栈,所以我们将网络层分为数据平面和控制平面。数据平面:即网络层中每台路由器的功能,该数据平面功能决定到达路由器输入链路之一的数据报如何转发到该路由器的输出链路之一。控制平面:网络范围的逻辑,该控制平面控制数据报沿着源主机到目的主机的端到端路径中路由器之间的路由方式。二、数据平面1. 网络层概述1.网络层作用:每台路由器的数据平面主要作用是从其输入链路向其输出链路转发数据报,控制平面的主要作用是协调这些本地路由器
2021-12-09 22:35:33 3333
原创 计算机网络自顶向下-运输层
一、概述1.运输层位于应用层和网络层之间,是分层的网络体系结构重要部分为运行在不同主机上应用进程提供直接的通信服务。运输层协议是运行在端系统中。运输层将从发送应用程序进程接收到的报文转换成运输层分组。该分组被称为报文段。报文段生成方法是将应用报文分成多个小块,为每一块加上运输层首部以生成运输层报文段。然后发送给网络层封装成网络层数据报发送到目的地。2.运输层协议:TCP和UDP。3.运输层和网络层关系:网络层提供了主机之间的逻辑通信,而运输层为运行在不同主机上应用进程提供逻辑通信。运输层协议将来自应用
2021-11-25 22:08:25 3014 1
原创 SQLite3中的SQL基本语句和高级语句
一、SQL基本语句1. 创建表:至少需要包含一个表名和一个字段名,创建基本表: CREATE TABLE stu (id int, name text, score real); 基本表会在数据库中永久存在。创建临时表:CREATE TEMP TABLE stu (id int, name text, score real); 临时表是暂时存活,一旦连接断开就会自动销毁。字段解析:stu:表名id/name/score:字段名int/text/real:类型SQLite有五种
2021-11-25 16:51:43 5406
原创 SQLite3下载与安装
一、SQLite概述:1.简介:SQLite是一款开源的、嵌入式关系型数据库,它在便携性、易用性、紧凑型、高效性和可靠性有突出的表现。它是一款嵌入式数据库,所以在大多数嵌入式开发中都会使用SQLite,它没有独立的进程,与所在的应用服务共同生存,代码也与应用程序代码在一起。对于内部程序有一个独立的数据库服务器,对于外部而言无法看到程序有一个关系型数据库在运行,程序也不需要关系数据库是如何运作的,只需要管理自己的数据即可。2.体系结构:SQLite拥有简洁、模块化的体系结构,可以划分为3个子系统和8个独立
2021-11-25 15:55:55 18621
原创 计算机网络自顶向下-应用层
一、简介:网络应用是计算机网络存在的理由,没有了应用也不存在任何的网络协议。我们学习网络应用的原理和实现方面知识,从定义应用层概念开始,其中包括网络服务、客户】服务器、进程和运输层接口。其中包括我们熟悉的web、email、dns等。二、应用层协议原理网络应用程序核心是能够在不同端系统和通过网络彼此通信的程序。像web应用程序,一个运行在web服务器主机,一个运行在用户主机上的浏览器程序。并且不需要关心下面层次的程序软件。三、网络应用体系结构应用程序体系结构由开发者设定,规定了如何在不同端系统上
2021-11-17 22:54:34 1560
原创 计算机网络中的基本概念
计算机网络与因特网一、概念:1. 主机/端系统:所有联网的设备。设备和设备之间通过通信链路和分组交换机连接在一起。2. 传输速率:通信链路传输速率用比特/秒(bit/s)表示。3. 分组:信息包,将长报文划分为较小的数据块。4. 路由器:用于网络核心,连接因特网中各局域网、广域网的设备5. 链路层交换机:用于接入网络的设备6. 路径:从发送端到接收端,一个分组所经历的通信链路和分组交换机。7. ISP:因特网服务提供商,所有端系统通过ISP接入因特网。8. TCP: 传输控制协议9. I
2021-11-13 17:29:33 3440
转载 Linux内存管理 -- smaps讲解
基本介绍/proc/PID/smaps 文件是基于 /proc/PID/maps 的扩展,他展示了一个进程的内存消耗,比同一目录下的maps文件更为详细。值得说明一下的是,每一个VMA(虚拟内存区域,即一个 vm_area_struct 结构指向的内存区域)都有如下的一系列数据:08048000-080bc000 r-xp 00000000 03:02 13130 /bin/bashSize: 1084 kBRss: 892
2021-11-03 14:43:25 8890
原创 Sqlite3 数据库基本操作
Sqlite3 数据库基本操作1、sqlite3命令**2、sqlite3编程接口:**3、事务:一个或多个更改数据库的扩展4、like和glob子句:5、limit 和 offset6、having:7、distinct8、约束:9、内连接10、别名11、触发器12. 索引1、sqlite3命令1.打开数据库: sqlite3 <*.db>2.系统命令: 以’.'开头 .quit : 退出sqlite3 .help : 查看帮助文档 .database: 显示当前打开的数据库
2021-09-18 10:13:04 11156 1
原创 C语言实现对图片的base64编解码
Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。Base64编码是从二进制到字符的过程,输出被映射到一组字符A-Za-z0-9+/,编码不添加任何行标,输出的解码仅支持A-Za-z0-9+/。源码:#include <stdio.h>#include <stdlib.h>#include <string.h>#define SAFE_FREE(ptr) if(ptr)free(pt
2021-08-26 09:57:38 750
原创 文件操作,读文件、写文件、获取文件长度、删除文件、判断文件格式等。
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <assert.h>#include <sys/types.h>#include <sys/stat.h>#include <dirent.h>#include <sys/stat.h>#define FILE_COPY_SIZE (16 * 1024)获取文件
2021-07-22 21:49:12 196
原创 错误解析 error:unable to find numeric literal operator ‘operator““a/b/c/...‘
当出现 error:unable to find numeric literal operator 'operator""c’或者 ‘b8’/ ‘xx’ was not declared in this scope 时候,一般是你申请char类型数组存储十六进制数组而没有在 像 c 、 b8,这些数字前加 ‘0x’ 导致的,改成 0x0c、0xb8 就好了。...
2021-07-01 13:38:45 7850
原创 Linux系统下文件与目录操作讲解
Linux系统下文件与目录操作在Linux系统中有一句话叫做,一切皆文件。上节我们说的I/O操作,对于普通I/O操作,都是打开、读写、关闭。这节我们通过stat结构体来了解文件的一些基本信息和本质特征。1. 获取文件信息 #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> int stat(const char *path, struct stat *buf);
2021-06-24 21:47:01 196
原创 Linux系统下I/O操作讲解,深入了解实战高级I/O编程
Linux系统下I/O一、I/O简介I/O(输入/输出)是在主存和外部设备(磁盘驱动器、网络、终端)之间复制数据的过程。输入是从外部设备复制到主存,输出是从主存复制到外部设备。在Linux系统中所有的I/O设备都被映射称为文件,所有的输入输出都被当做相应文件的读和写来执行,所以内核提供了系统级的I/O函数接口,使得所有输入输出都以统一且一致的方式来执行。打开文件,返回一个非负整数,叫做描述符每个进程都默认打开三个描述符,标准输入 STDIN_FILENO(描述符0)、标准输出 STDOUT_FI
2021-06-22 20:56:09 1113
原创 Linux操作系统下C语言网络编程(全文23475字,包含了Linux系统下所有网络编程的知识点,附程序代码)
一、简介如今网络应用随处可见,web、http、email 等这些都是网络应用程序,他们都有着基于相同的基本编程模型,有着相似的整体逻辑结构,并且还有着相同的编程接口。我们需要了解基本的客户端-服务器编程模型。1.1 客户端-服务器编程模型每个应用程序都是基于客户端-服务器编程模型的,他们由一个服务器进程和多个客户端进程组成,服务器管理某种资源,通过操作这种资源来为客户端提供某种服务。例如ftp服务器管理磁盘文件,为客户端存储和检索。客户端-服务器编程模型中的基本操作是事务,一个客户端-服务器事务
2021-06-07 21:28:35 1087 1
原创 Linux操作系统下进程讲解(史上最强总结)
Linux操作系统下进程讲解一、进程的基本概念:1. 什么是进程在传统的操作系统中,程序不可以独立的运行,作为资源分配和独立运行的基本单位都是进程。进程的定义是一个可执行中程序的实例,系统中每一个程序都运行在某个的上下文中。上下文是由程序正确运行所需的状态组成的,这个状态包括存放在内存中的程序的代码和数据,它的栈、通用目的寄存器的的内容、程序计数器、环境变量以及打开文件描述符集合。2.进程的特征2.1 结构特征进程通常是不可以并发执行的,为使程序独立运行,必须配置进程控制块(PCB),由程序段
2021-05-26 21:57:42 2232
原创 Linux操作系统下信号处理函数
Linux系统下的信号一、信号概念1. 什么是信号信号是软件中断,信号提供了一种异步处理事件的方法,它允许进程和内核中断其他进程。一个信号就是一条消息,它通知进程系统发生了一个某种类型的事件,在Linux系统中支持31中不同类型的信号在我这篇文章中给大家列出了Linux系统支持的31个信号(https://blog.csdn.net/qq_34934140/article/details/116550027)。每种信号都对应不同的系统类型,底层硬件异常是由内核异常处理程序处理的,正常情况下对用户是
2021-05-11 22:28:30 1940
转载 C语言各种排序算法(冒泡排序、快速排序、插入排序、希尔排序、快速排序、 归并排序)
不知名排序#include <stdio.h>int main(){ int a[18] = {11,5,53,10,26,3,89,32,9,10,1,24,35,56,43,23,788,43}; int i,j,k,n; n = sizeof(a) / sizeof(int); printf("n = %d\n", n); for (i = 1; i < n; i++) {
2021-05-11 14:20:07 374
原创 Linux 操作系统下常见信号详解
注释:终止+core:表示在进程当前工作目录的core文件中复制了该进程的内存映像,该文件名为core,可以使用core文件检查进程终止时的状态。| SIGINT功能: 终端中断符默认动作: 终止说明: 当用户按中断键(Ctrl+C)时,终端驱动程序产生此信号并发送至前台进程组中的每一个进程,当一个进程在运行时失控,特别是在终端输出大量信息时,常用此信号终止它。| SIGQUIT 功能: 终端退出符默认动作: 终止+core说明: 当用户在终端按退出键(Ctrl+\)时,
2021-05-09 00:51:02 620
原创 C++实现系统性能检测工具
最近在项目中需要一个小工具来实时检测系统性能,检测某一块代码耗时多长时间,然后我在网上找了一个开源的项目稍作修改实现了这个功能。下面把代码贴出来给大家使用。profiler.h 文件#ifndef HOBOTXSTREAM_PROFILER_H_#define HOBOTXSTREAM_PROFILER_H_#include <iostream>#include <atomic>#include <chrono>#include <fstream&g
2021-04-28 09:55:56 656
原创 守护进程
守护进程一:什么是守护进程守护进程是生存期长的一种进程,他们常常在系统引导装入时启动,在系统关闭时终止,他们没有终端,所以他们始终在后台运行。二、守护进程的特性1.大多数守护进程都是root权限。2.因为守护进程没有终端,所以终端名为问号 ‘?’。3.大多数守护守护进程是进程组组长和会话的首进程。4.用户层的守护进程是init进程,init进程是系统守护进程。5.内核守护进程的名字出现在方括号中。我们可以在中端输入命令 ps -aux 查看进程我们可以看到 TTY 终端这一列都是问
2021-04-22 23:15:03 655
原创 Linux C语言实现清除文件中的内容
有时候我们的程序把一个文件中的内容清空,然后重新写,比如我最近写的一个性能检测小工具,我需要把检测到的内容写入到一个日志文件,然后将这些日志发送出去,然后我再把新的日志写进来,这时候就遇到一个问题,如果我不把旧的内容清除掉,那么新的内容可能会在原来的内容后面追加,也许会直接覆盖,这取决于你是怎么打开的文件。但是也没有想过如果新的内容长度大于原来的长度,这好说直接覆盖了就可以了,但是如果新的内容长度小于原来的内容长度怎么办?只能覆盖一部分啊,这是不是就有问题了,这时候我们就需要清除文件中的内容了。下面我给大家
2021-04-20 23:01:51 6715
原创 一文搞定Linux环境下线程编程,这些东西老师也不会教你。(史上最详细的线程攻略)
一、线程的概念1.1 什么是线程线程是一个实体,是CPU调度和分派的基本单元,有时我们也可以称它为轻量级的进程。每个线程都包含有表示执行环境所必须的信息,其中包括标识线程的线程ID、一组寄存器值、栈、调度优先级和策略、信号屏蔽字、error变量以及线程私有数据(下面我们会讨论)。除此之外,我们知道线程还包括所在进程的所以信息,包括可执行程序的代码、程序的全局内存和堆内存、栈以及文件描述符。1.2 多线程的好处在典型的Unix进程可以看做只有一个控制线程,在某一时刻只能做一件事情,当我们有了多线程
2021-04-18 23:25:33 170
原创 x86 汇编指令集
一、汇编标志位:CF: 进位标志 进位标志CF主要用来反映运算是否产生进位或借位。如果运算结果的最高位产生了一个进位或借位,那么,其值为1,否则其值为0。 使用该标志位的情况有:多字(字节)数的加减运算,无符号数的大小比较运算,移位操作,字(字节)之间移位,专门改变CF值的指令等。PF: 奇偶标志 奇偶标志PF用于反映运算结果中“1”的个数的奇偶性。如果“1”的个数为偶数,则PF的值为1,否则其值为0。 利用PF可进行奇偶校验检查,或产生奇偶校验位。在数据传送过程中,为了提供传送的可靠性,如果采
2021-03-25 22:25:11 2047
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人