自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(36)
  • 收藏
  • 关注

原创 centos7源码编译python3.12.3

回答问题4:因为yum本事是依赖python的,并且是python2,现在安装python3,如果直接make install会把python2覆盖,导致yum出问题。日志提示:[ERROR] _hashlib failed to import: libcrypto.so.1.1: cannot open shared object file: No such file or directory。执行yum remove python它是提示日志:错误:尝试移除受保护的 "yum"

2024-05-02 09:16:24 891 4

原创 centos7编译源码编译高版本gcc,出现问题1:collect2: 错误:ld 以信号 9 [已杀死] 退出。出现问题2:xgcc: fatal error: cannot execute ‘cc

配置为:../gcc-13.2.0/configure --prefix=/opt/gcc-13.2.0 --enable-languages=c,c++,fortran --disable-multilib。配置为:../gcc-13.2.0/configure --prefix=/opt/gcc-13.2.0 --enable-languages=c,c++,fortran --disable-multilib。dr-xr-xr-x. 43 root root 4096 4月 30 01:42 ..

2024-05-01 03:51:35 560

原创 在windows环境使用C++开发一个提示保护眼睛的服务(二)(开发中)

服务控制程序可以创建或修改与服务关联的DACL以控制访问。使用QueryServiceObjectSecurity函数可以检索与服务对象关联的DACL。使用SetServiceObjectSecurity函数可以设置DACL。对服务对象关联的SECURITY_DESCRIPTOR所做的任何更改都将持久存在,直到服务从系统中移除。以下示例创建并设置了一个新的服务DACL。代码将一个访问控制项(ACE)合并到服务的现有DACL中。

2024-01-16 14:42:21 407

原创 在windows环境使用C++开发一个提示保护眼睛的服务(一)

长时间使用电脑,导致眼睛胀痛,去医院检查,眼压升高,严重可能导致青光眼,进而导致失明。所以准备开发一个程序来提醒自己保护眼睛。程序在后台运行,所以准备开发为服务,开机自启动。我对C++更熟,对C#不熟,所以准备使用C++。服务检测开机与解锁,检测到之后开始计时,比如40分钟,这个可以自己定,之后提示已用时40分钟,需要休息眼睛。windows服务开发文档使用chat3.5翻译的。

2024-01-12 16:27:49 938

原创 linux cat命令增加文件名功能后修复可能出现的bug

增加显示文件名功能后,需要将输出缓冲区的大小增加FILENAME_MAX+1,FILENAME_MAX为当前系统文件名最长时占用的字节数,1为冒号占用的1字节,否则在特殊情况下,会导致输出缓冲区不够用,程序崩溃报段错误。输出缓冲区分配的大小再加1更安全,所以实际分配的大小为insize*4 + outsize - 1 + LINE_COUNTER_BUF_LEN - 1 + FILENAME_MAX+1+1。LINE_COUNTER_BUF_LEN - 1为输出行号最大需要的字节数。

2024-01-05 20:01:33 405

原创 linux cat命令改变功能显示当前文件行号

linux的cat命令使用-n显示多个文件行号时,行号是累加的,不是到了新文件就重新计数。如果到了新文件能够重新计数,就能使用-nf(在上一篇-f显示文件名功能的基础上)加| grep xxx,既能直接显示xxx所在文件名,又能直接显示xxx所在文件的行号。使用git diff加提交id查看提交前后的差异,新的提交id放在后面看起来会更舒服,显示的差异是增量。使用git log查看提交日志,可以看到之前别人的提交备注信息都是简短的关键词加冒号,再加简单的说明。修改后的./src/cat.c文件。

2023-12-29 14:55:35 608

原创 linux cat命令增加-f显示文件名功能

比如cat ./src/*.c | grep full_write,在src目录下的所有.c文件里找full_write,能匹配到所有的full_write,但是不知道它们分别在哪些文件里。这样就能直观的知道它们分别是在哪个文件里找到的,命令为cat ./src/*.c -f | grep full_write。找到之后再配合-n,就能显示出它是在哪个文件的哪一行,cat ./src/x.c -n | grep full_write。修改后的cat.c文件。

2023-12-27 11:18:48 675

原创 ffplay播放视频时有声音无画面

ffplay播放视频时有声音无画面。重新编译安装SDL2。重新编译安装SDL2。

2023-09-06 22:03:59 364

原创 AMD CPU降低风扇噪音

将cpu的超频由自动改为100%。将cpu的基础频率改到够用即可。我用的win10,将cpu频率改为32倍,也就是3.2GHz,这样基本够用了。这时候会发现风扇噪音大大降低了。一般情况下,cpu的性能是足够日常使用的,看视频,玩普通游戏等。所以现在解决的办法就是在满足需求的情况下尽量去降低cpu的性能。重启电脑,按del进入主板设置界面,不同厂家的主板进入方式不同。想要降低cpu风扇噪音,就要降低cpu风扇转速。想要降低cpu风扇转速,就要降低cpu温度。

2023-08-25 09:36:52 262

原创 使用gdb调试iconv

iconv在将gbk转为unicode的时候,是查表完成的,gb2312.h里的数组信息,就是它查询使用的表,和预想一致。iconv将gbk转为utf8,在最底层是一个字符一个字符转,现将gbk的汉字转为宽字符的汉字,再讲宽字符的汉字填入utf8要求的格式。我所需要具备的,不是掌握一个命令的所有用法,也不是掌握所有的命令的功能,而是去完成一个需求时,所需要具备的一整套能力。传地址的地址,就像传递碗外面的一个碗,人家把我要的碗放在这个碗里,我再通过我要的碗找里面的东西。这里的s是哪来的,s的值是“Nd”?

2023-08-22 16:34:06 101

原创 gbk,unicode,utf8的区别

所谓utf8,并不是一个字符集,只是一个编码方案,将unicode转为utf8所需要的格式,就是utf8编码。所谓宽字符,实质是unicode,是世界定制的字符集标准,一个汉字对应一个unicode编码。细心看就会发现,utf8实质是unicode编码按utf8要求的格式填进去的。所谓gbk,是中国制定的字符集标准,一个汉字对应一个gbk编码。230 173 166,占用3个字节,二进制表现形式为。27494,占用2个字节,二进制表现形式为。2个字节,16位,正好填入这16个X。

2023-08-18 16:14:12 278

原创 普通文本转C/C++源文件支持的格式

源文件里面写文本,需要手动一行一行给它加\r\n\,挺不爽。所以现在想开发一个小工具解决这个问题,直接将文本转为源文件里需要的形式。想起来容易,做起来起始没那么容易,学到了挺多。源文件,可以自己拿去编译。windows环境,系统编码设置为utf8,仅支持utf8,否则一定会有问题。

2023-08-15 11:06:02 218

原创 windows风格目录转linux风格目录

在使用msys2的时候,需要使用linux风格目录,而从windows复制过来的目录字符串,需要一个一个去改正反斜杠,还要给带空格的加上单引号,挺麻烦,于是开发了这个工具直接转。编译的时候,取消sdl检查就行。

2023-08-11 09:55:39 135

原创 C compiler test failed

想重新使用msys2编译带动态库的ffmpeg,执行`./configure --toolchain=msvc --enable-sdl2 --enable-shared`,但是提示报错`C compiler test failed.`。

2023-08-10 16:53:43 421

原创 windows修复文件名乱码

从linux机器传中文文件名的文件到windows,会导致文件名乱码,这时因为linux编码是utf8,windows是gbk。找了一下好像没有类似linux的iconv,convmv的工具。于是自己手写了一个。已经开发成功并经过自测。取名叫utf8togbk.exe。主要功能是两个,一个是修复单个文件的乱码文件名,另一个是指定目录,递归修复包括此目录名在内和此目录里的所有乱码中文名。贴代码,使用的vs2022,需要取消sdl检查,和至少支持c++17,因为用到了std::filesystem。

2023-08-08 12:50:48 353

原创 fdisk创建分区

使用fdisk创建一个新的分区,使用命令sudo fdisk /dev/sda,接下来会进入到与fdisk的对话中。输入`p`查看现有分区表,输入`n`创建一个新分区,输入`p`创建一个主分区,输入空表示默认起始地址,输入`+1G`表示新分区的大小为1G,输入`w`保存。继续sudo fdisk /dev/sda,p打印,d删除,根据提示输入数字,删除自己想删除的分区,w保存。这样就有新的空间可以创建新分区了。字节数除以End与Start的差值,得到的值是512,说明Start和End表示的是起始扇区数。

2023-08-04 19:40:26 261

原创 extundelete实现数据恢复

首先格式化设备,mkfs.ext3 /dev/sdb1,然后挂载mount /dev/sdb1 /sdb1,挂载后可以查看inode值,ls -id /sdb1,如果是2就是代表ext3或ext4,如果是64代表是xfs。在/sdb1创建一个文件a01,写入内容后删掉。使用extundelete恢复,extundelete /dev/sda4 --restore-file a01。如果忘记了文件名,可以使用extundelete /dev/sdb1 --inode 2来查询文件名和inode。

2023-08-04 19:37:02 495

原创 vmware虚拟机与真机文件共享

在网上找xp的资源,下载好之后使用vmware安装,安装时遇到了问题,没有进入系统安装,而是dhcp在请求一个ip。在网上继续找xp的资源,继续安装,这一次进入系统安装界面了。系统安装好之后,ping本机,ping百度,都得通,但是ping真机ping不通。开机进系统,将xp的ip设置为192.168.1.3,继续ping本机,百度,真机,都ping得通。现在开始设置共享文件夹,真机和虚拟机都设置,设置好之后各自验证,通过ip地址能够访问到自己的共享文件夹,但是不能访问到对方的共享文件夹。

2023-08-04 08:46:56 81

原创 centos7修改用户名

centos7修改用户名。在百度上搜索,第一种方案是修改多个配置文件,然后重启,感觉不够优雅。第二种方案是使用usermod -l 新用户名 当前用户名。尝试修改时提示,当前用户名正在被某个进程使用。于是kill -9 pid。这时候需要使用root用户登录,再次使用usermod修改用户名,如果再提示用户名被某个进程使用,继续kill,然后继续usermod,发现修改成功了。登出root,使用自己的用户名登录。

2023-08-03 15:51:25 874

原创 ffmpeg api实现将音视频混合

将AVPacket写入输出环境时,音频和视频的stream_index不能相等,如果音频的stream_index等于0,那么视频的stream_index需要等于1,可以手动改。出现这种情况的原因是输入的xxx1.mp3可能包含2个流,一个是音频,另一个是视频,音频流索引是0,视频流索引是1。输入的xxx2.mp4至少包含2个流,一个是音频,另一个是视频,而这里视频流索引是0,音频流索引是1。将从输入流解析出的AVPacket的跟时间相关字段,从当前的输入流时基对应的值转为输出流时基对应的值。

2023-05-09 14:46:59 1929 13

原创 声音是如何存储下来的

对声音进行采样,每秒固定采样44100次,那么频率就能量化。对振幅进行采样,振幅就能量化。那么声音就被记录下来了。重现声音的时候,在这44100个时间点去还原出振幅,声音的波形就重现了。而振动只有两个变量,一个是振幅,一个是频率。

2023-04-25 16:23:50 264

原创 ffmpeg在windows编译带ffplay.exe使用msvc工具链

改脚本(msys2_shell.cmd文件set MSYS2_PATH_TYPE=inherit去掉set)-sdl2.pc(/usr/lib/pkgconfig/创建文件sdl2.pc并编辑好)-sdl2 include目录里所有的头文件放入/usr/local/include/sdl2。-SDL2main.lib, SDL2.lib放入/usr/local/lib。这里的/usr/local/include/sdl2是相对msys2的目录。ffmpeg/config.h里面的中文字符去掉。

2023-04-25 15:25:51 274

原创 通过经纬度计算两座城市的距离

【代码】通过经纬度计算两座城市的距离。

2023-03-30 14:15:54 396

原创 魔兽争霸3游戏改键原理

如果是war3的窗口,则判断此键盘消息的键值码是否是z的键值码,如果是,则通过代码产生一个虚拟按键事件,如果不是,则也进行默认的消息处理。虚拟键盘事件也同按了键盘一样,会在系统消息队列产生新的小键盘1的键盘消息,然后此消息又会被全局钩子捕获到,但它此时不是z了,默认不处理派发给游戏窗口。至此,本来按z产生的键盘消息,变成了按1产生的键盘消息,被放入游戏窗口队列,被游戏窗口的消息处理函数处理,从而实现了改键。当按下z的时候,把这个键盘消息替换为小键盘1,再传递给游戏窗口队列,需求就能实现。

2023-03-30 12:14:12 733

原创 访问多点计算最短路线

举例,武汉出发,想去五岳旅游,最后返回武汉,如果全程高铁或动车,怎样依次访问到并费用最低?我的思路比较简单,首先手动查询票价信息,整理成表格。然后列出全排列并记录。最后计算费用,找出最低值并打印整理出的表格,为简化问题仅考虑高铁动车费用,10000表示不方便(需要多次换乘等) 武汉 泰山 华山 恒山 衡山 嵩山 武汉 0 497.5 419 651.5 229 312 泰山 506 0

2022-04-26 11:26:30 379

原创 delete基类指针能不能释放子类对象

#include <stdio.h>class A{public: A() { printf("A\n"); } ~A() { printf("~A\n"); }};class B : public A{public: B() { printf("B\n"); } ~B() { printf("~B\n"); }};int main(){ A *p = new B; delete p; return 0;}执行结果:AB~A基类析构函.

2021-03-02 10:39:20 1464 2

原创 getdelim

详见man手册man getdelim#include <stdio.h>ssize_t getline(char **lineptr, size_t *n, FILE *stream);如果用户没有给*lineptr分配堆内存,那么系统默认分配的堆内存长度是120。如果用户有给*lineptr分配堆内存,如果足够,系统不会修改长度,如果不够,系统会realloc两倍的长度。第二个参数类型需要时size_t,不要是int。参数类型尽量一致,搞规范,不要随意地搞隐式转.

2020-09-09 17:29:50 1186

原创 研究va_list

测试代码#include <stdarg.h>#include <stdio.h>void s(const char* str1, const char* str2, ...){ va_list va_list_; va_start(va_list_, str1); const char* p1 = va_arg(va_list_, const char*); printf("p1 : [%p] [%s]\n", p1, p1); c...

2020-08-21 12:08:26 128

原创 16进制字符串数转10进制整数

bool hexchar2int(char* p, int* num){ if (*p >= '0' && *p <= '9') *num = *p - '0'; else if (*p >= 'A' && *p <= 'F') *num = *p - 'A' + 10; else if (*p >= 'a' && *p <= 'f') *num = ...

2020-08-14 14:50:41 190

原创 研究C++类的成员变量构造析构顺序

#include <stdio.h>class A{public: A() { printf("a\n"); } ~A() { printf("~a\n"); }};class B{public: B() { printf("b\n"); } ~B() { printf("~b\n"); }};class C{public: C() { printf("c\n"); } ~C() { printf("~c\n".

2020-07-08 14:53:09 4270

原创 修改vscode文本编辑器默认的输入方式

vscode的文本编辑器继承了linux上vim的功能。用vscode打开源文件后,可能默认的模式是一般模式,这种模式下是不能输入字符的,对于用惯了windows的人来说是非常不习惯的。如何将默认的模式更改为插入模式呢。File-Preferences-Settings,搜索vim.startInInsertMode,再Start in Insert mode前面打上勾。...

2020-06-01 11:50:45 7182

原创 零基础尝试使用cmake

本文适合新手,从未使用过cmake的人。本文介绍自己对cmake的理解。同时也介绍自己在linux下成功使用cmake编译好自己的项目,及踩过的坑。cmake是一个跨平台的工具,起初耳闻cmake,是为了解决当项目变大源文件变多时,在linux写Makefile工作量太大,所以使用cmake来自动生成Makefile,以减轻工作量。在linux上确实是如此...

2020-05-17 10:32:59 1007

原创 boost::asio异步收消息

需求背景说明,boost::asio网络编程库,在进行同步收发消息的时候,本身是不支持超时的。如果自己想尝试去实现,给同步收消息增加一个超时,会有一系列弊端,比如额外的工作量,简单的代码变得不好看,程序可能变得不稳定。同时,在高并发情况下,就更是需要使用异步收消息来提升性能,开更少的线程去做更多的事。本人能力有限,本文只介绍boost::asio异步收消息的基本使用。要想实现异步操作,就...

2020-04-27 18:03:42 955

原创 MFC控件组合框

组合框,例如为了确定ip是30网段还是50网段,可以在对话框提供一个组合框来选择。当点击组合框的下拉按钮的时候,就显示出30和50来选择。组合框对应的是CComboBox类。在对话框中,拖入的组合框控件上,右键-添加变量-添加CComboBox类型的变量,输入变量名。那么,对话框中就有此组合框类的成员变量了,并且自动在DoDateExchange()里面添加了DDX_Control(),这样对话框...

2020-04-22 11:43:50 267

原创 缓存数据时别名的使用

在缓存数据时,写了一个类,专门负责保存数据,保存到类的成员变量里,并提供写入和读取接口。在保存的时候,使用写入接口,传递参数时不能使用别名,否则成员变量不能真的把数据保存下来,使用别名,在外面的局部变量析构后,数据就没了。所以在保存时,不能使用别名,保存时需要拷贝一次,从局部变量拷贝到类的成员变量。在读取时,需要使用别名,否则读取不到。变量在传参时,就拷贝了一次,在函数里面,拷贝的变量是能拿到数据...

2020-04-16 10:15:06 176

原创 程序员好的工作习惯

作为一名新手程序员,刚开始工作的时候,总感觉乱七八糟的。现在写代码,完成一个或多个需求,就编译,然后自测,最好进行路径覆盖,自测没问题后,就上传代码到svn。这样一连串的一套动作,都完成,才算一个需求完成了。如果代码写完不自测,不将没问题的代码上传到svn,就好像吃完饭不洗碗,起床不叠被子,比较乱,该做的工作并没有做完。...

2020-04-16 10:09:48 245

linux cat命令增加文件名功能后修复可能出现的bug

linux cat命令增加文件名功能后修复可能出现的bug

2024-01-05

linux cat命令改变功能显示当前文件行号

linux cat命令改变功能显示当前文件行号

2023-12-29

linux cat命令增加-f显示文件名功能

linux cat命令增加-f显示文件名功能

2023-12-27

普通文本转C/C++源文件支持的格式

普通文本转C/C++源文件支持的格式

2023-08-15

windows风格目录转linux风格目录

windows风格目录转linux风格目录

2023-08-11

windows修复文件乱码

修复从linux传中文文件名文件到windows时乱码的文件

2023-08-08

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除