- 博客(21)
- 收藏
- 关注
原创 spin_lock,spin_lock_irq,spin_lock_irqsave的区别
本人初学者,以下内容仅供参考一、了解什么是spin_lockspin_lock,就是自旋锁。spin_lock_irq、spin_lock_irqsave.也是自旋锁这三个只是适用的场景不同。自旋锁简单来说就是一把锁。打个比方:蜂巢快递箱,大家都可以用,但是别人在用的时候加了锁你就不能用,这个锁就跟自旋锁很相似。同样作用的还有互斥锁(mutex)和信号量。但是他们有差别,不废话,看下文。二、spin_lock特点:①只关闭内核抢占,不会关闭本地的中断。(个人觉得这里的内核抢占简单的说就是:其他进程
2021-04-26 21:21:36
2988
1
原创 字节序的大端序小端序的判断方法
题目先来看一下这个题吧如图已知代码段,该代码段的输出结果为“25”,请问当前系统是()字节序。A、大端序 B、小端序#include<stdio.h> Int main() { int i=8217; char c=(*(char *)&i); printf(“%d\n”,c); }答案:小端序解析:实现思想:1.定义一个 32 位的 int 型变量,8217-》二进制0000 0000 0000 0000 0010 0000
2021-04-25 09:38:28
1680
3
原创 结构体地址对齐问题,#pragma pack(n),gcc与VC的不同
结构体地址对齐问题我用的编译器是gcc的64位。情况一:不含有#pragma pack()地址对齐参考的字节数,是以结构体元素中最大字节数为标准,若结构体S2中含有结构体S1,结合两个结构体中元素最大的字节数为标准(ps:若出现数组,如:char array[3],拆分成:char array[0]、char array[1]、char array[2].进行对齐。)。例子①含有数组:②含有结构体:情况二:含有#pragma pack()有种方式可以强制更改结构体对齐方式#pragma
2021-04-19 11:04:18
678
2
原创 无符号数跟有符号数之间暗藏杀机
无符号和有符号之前暗藏杀机你get到了吗,不要在遇到坑了一、直接上代码大家看看这段代码有什么错误吗?float sum_elements(float a[], unsigned length) { int i = 0; float sum = 0; for(i = 0; i <= length -1; ++i) sum += a[i]; return sum; }仔细观察,再仔细观察。。。。这个函数一看就是求一个数组
2021-02-25 17:14:24
210
原创 C语言用printf()打印u8,u16,u32等参数类型
想必大家都知道printf打印int 型是用%d,但是u8,u16,u32,u64还有s8,s16,s32,s64是如何打印呢,知道的大佬绕行哈,不知道往下看看。what is u8?常见的u8其实是自定义的,定义如下:typedef signed char s8; typedef unsigned char u8; typedef signed short s16; typedef unsigned short u16; typedef signed int s32;
2021-02-24 17:31:09
29509
2
原创 最常见的strncpy函数的缺陷,‘\0‘问题
strncpy想必大家经常会用到复制字符串的函数吧,有时候不经意就会用到strncpy(),我有时也有用到过,但是殊不知这个函数隐藏一些缺陷。先来了解strncpy吧原型:char *strncpy(char *dest, const char *src, size_t n)参数:dest – 指向用于存储复制内容的目标数组。src – 要复制的字符串。n – 要从源中复制的字符数。返回值:最终复制的字符串易错点strncpy复制后dest如果最后一个没有’\0’,用dest的时候没有
2021-02-23 17:13:12
7437
3
原创 NULL空指针解引用
NULL指针解引用首先问大家一个问题就是,大家最开始使用函数(包含指针的函数),例如size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream),是否有做过一些处理判断?如果有就别往下看了,没有呢可以往下看看_我个人是没有的。但是我最近在上班的时候处理一些事情的时候发现,使用这类函数是需要对指针进行null检查的,叫检查null指针解引用为什么?什么是空指针解引用C语言空指针的值为null,一般null指针指向进
2021-02-22 17:35:00
6218
5
原创 初学驱动-字符设备驱动第一天(1)
刚开始学习驱动,首先学习的是字符设备驱动。这边文章先介绍的是刚学需要了解的粗略的知识(cdev结构体、设备号),然后是整合最简单的用例看整体的思路。简述Linux设备驱动有三种:字符设备驱动、块设备驱动、网络设备驱动。其中字符设备驱动最为基础。其中最为关键的就是cdev和file_operations这两个结构体。个人理解:cdev就是用来描述的字符设备——字符设备,file_operations就是操作字符设备的函数的集合的结构体。一、cdevstruct cdev{ struct kobje
2020-12-29 19:54:28
202
原创 Linux源码的目录结构和Linux文件系统的目录结构
Linux源码的目录结构和Linux文件系统的目录结构我是一个小白,最近找工作找到是一份驱动方面的工作,刚从学校毕业出来啥也不懂。个人觉得首先了解的就是一个工程的目录下的文件分别表示什么,所以看了别人的文章,简单的总结一下。后期会陆续的发我在驱动中学到一些内容,以及关于驱动方面的我涉及到单词的集合(刚入职,连专有名词都不懂,太菜了)一、Linux源码的目录结构:首先来一张目录截图看一下一共有哪些文件。看图然后就是看一下了解一下每一个文件分别表示的是什么。看图说话如果需要详细的了解每一个文件都
2020-12-28 19:07:43
2486
3
原创 Ubuntu中Linux安装sqlite数据库,在Linux中编译,在Linux和window中图形化界面的操作,以及简单的sql语句的使用。
在Ubuntu中安装数据库,在Linux中编译,在Linux和window中图形化界面的操作,以及简单的sql语句的使用。也是适合小白的,大佬们别喷我。1、安装数据库命令sudo apt-get install sqlite2、也可以去官网下载源码,每次运行源码(缺点:麻烦、编译慢)从官网去下载源码,编译安装①下载 https://www.sqlite.org/download.html②进入源码路径shell.c sqlite3.c sqlite3ext.h sqlite3.h③编
2020-11-16 13:51:44
739
原创 QT中sqlite数据库的简单的增加删除查找修改(适合小白)
这篇帖子是我最近学习QT的sqlite数据库整理的,之前学的是MySQL应用与Java,现在重新捡起来,小白可以看看,特别简单适合小白。一、首先看一下布局,形成一个整体的思路1、添加书获取左边lineEdit的内容2、删除时通过学号删除。3、修改是通过学号或者姓名修改4、查找时上面的文本框输入sql语句(select * from StuInfo where age=22;),然后点击查询,下面的文本框显示结果。二、数据库内容:1、字段包括:学号(num)、姓名(name)、年龄(age)、
2020-11-16 13:16:25
5404
原创 Linux网络编程,TCP 多用户的链接问题。select函数的简单运用
描述:关于tcp多用户的来链接问题:首先需要了解select大致工作步骤:select是相当于一个等待函数,当参数中的集合里面的文件描述符有动作的时候,select函数会把有动作的文件描述符留下来,其余的全部清空掉,select的第三个参数,表示读所以:对于tcp的多用户的链接思路:server端:将server_fd加入集合中,如果server_fd有动作就说明有客户端想要链接,就调用accept函数。accept函数会把想要链接的客户端的client_fd 返回,将client_fd放入一个
2020-08-21 18:36:33
360
原创 Linux网络编程,bind:error:Cannot assign requested address,Ubuntu网络桥接
一:问题:刚开始学习Linux网络编程,第一次使用bind函数出现Cannot assign requested address,错误。在网上找了很多帖子但是都没有解决。二:问题一:也就是网上大部分说的:客户端频繁的连服务器,由于每次连接都在很短的时间内结束,导致很多的TIME_WAIT,以至于用光了可用的端 口号,所以新的连接没办法绑定端口,即“Cannot assign requested address”。是客户端的问题不是服务器端的问题。方法一:通过netstat -nap查看当前的状态,的
2020-08-20 14:40:50
18657
1
原创 Android中SQLite数据库中query或者rawquery查询失败闪退问题
最近在学Android,在使用SQLite数据库的时候,出现了一个问题就是:先说说我要实现功能: 查找数据库中是否有某个用户和密码。最开始我是用的rawquery查询数据,看代码查询:Cursor cursor = db.rawQuery("select * from usertable where stuname=? and password = ?", values);判断是否相等: { if (cursor.getString(cursor.get
2020-06-24 18:00:06
3674
1
原创 3、验证:信号会相互嵌套,但不会嵌套相同的信号-linux-signal-
题目:验证:信号会相互嵌套,但不会嵌套相同的信号代码验证:#include <stdio.h>#include <unistd.h>#include <string.h>#include <sys/wait.h>#include <stdlib.h>#include <sys/types.h>#include...
2020-04-16 17:49:15
738
原创 2、验证:子进程不会继承父进程中挂起的信号-Linux-进程-信号
题目:验证:子进程不会继承父进程中挂起的信号验证代码如下:#include <stdio.h>#include <unistd.h>#include <string.h>#include <sys/wait.h>#include <stdlib.h>#include <sys/types.h>#include...
2020-04-16 17:28:30
718
原创 1、验证,子进程会继承父进程的阻塞掩码sigprocmask
题目验证:子进程会继承父进程的阻塞掩码验证代码:#include <stdio.h>#include <unistd.h>#include <string.h>#include <sys/wait.h>#include <stdlib.h>#include <sys/types.h>#include <...
2020-04-16 17:23:34
566
原创 linux系统,系统编程SIGTSTP信号出现Linux系统的重启问题-signal()注册捕捉限号,kill()函数传递信号-模拟司机和售票员的信号传递
父进程代表司机,子进程代表售票员1、出发:售票员收到SIGINT信号,就发送一个SIGUSR1给司机,司机捕获到该信号后打印“出发”;2、靠站:售票员收到SIGQUIT信号,就发送一个SIGUSR2给司机,司机捕获到该信号后打印“靠站”;3、到总站:司机收到SIGTSTP信号,就发送一个SIGUSR1给售票员,售票员收到该信息后打印“车到总站,请所有乘客下车”,最后退出进程。注意的是:1...
2020-04-14 21:53:58
561
转载 Ubuntu进入编辑模式按上下左右键,会跳出ABCD,解决
这个是我在我别人那里看到的,一次就OK,完美。链接过去吧。https://blog.youkuaiyun.com/baidu_30809315/article/details/78237269
2020-01-04 13:36:31
478
原创 Ubuntu的/mnt/hgfs共享文件夹里面没有东西,VMware tools是灰色
在刚开始使用Ubuntu16.04的时候,第一次安装后使用的时候可以使用共享文件夹,但是重启过后就发现在/mnt/hgfs共享文件夹里面没有东西。在网上也看了好多教程,可能是机子的差异问题,方正没解决。最后阴差阳错就解决了。下面看我的心沥血。总结就是:1、sudo su(进入你的最高权限)2、vi /etc/fstab3、然后在文件的最后一行加入:.host:/ /mnt/hgfs fus...
2020-01-04 13:33:05
3260
4
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人