- 博客(40)
- 收藏
- 关注
原创 ubuntu ffmpeg 手动编译 编译成功后运行,找不到xxx.so
应该安装的安装了,运行了这个配置之后,make make install 生成了对应的执行文件运行./ffmpeg 说找不到对应的库文件,我一看,其实就是在;libavdevice里,然后我就把他移动到/usr/lib下,然后又有一个其他库找不到,总不可能一个个sudo cp吧。
2024-05-26 20:49:58 319
原创 tinywebserver heaptimer模块 事件定时器
项目源网站。这个模块是事件定时器,这个模块是干啥用的?当客户端来了一个连接,但是我不发送请求,就这样干耗着,这个时候服务端就应该断开连接,给其他客户端的请求。这是主函数,GetNextTick就是询问当前有没有超时的事件需要处理,有的话就处理了,在连接客户端的函数里就是添加了一个关闭客户端的事件。
2024-05-24 16:56:20 342
原创 tinywebserver buffer模块 缓冲区
/ | | 数据 | |//读指针的位置 [readPos_, writePos_) 这一块是可读的正确的数据//写指针的位置 [writePos_, buffer_end) 这一块是空闲区域用vector buffer_相当于就是一串存储一个字节的数据,就是缓冲区。readPos_ 和 writePos_之间的,就是有效的数据。
2024-05-24 11:34:34 397
原创 tinywebserver epoller模块 非阻塞IO
面试的时候,老是考阻塞IO和非阻塞IO的区别,其实在写代码的层面上,都是系统调用。这段代码摘自,非常的优雅,用了c++新特性,我倒是觉着,这些都是文档,到时候调他的包就好了,不懂再查。上代码。
2024-05-16 20:28:46 156
原创 vscode 调试,指定程序运行的参数
我们平时写程序的时候,需要 ./tinytest aaa这样的格式,但是vscode调试功能没有指定参数的功能,这里改一下配置就好了。program是需要运行的程序,args是输入的参数。然后按F5就可以启动调试了。
2024-04-29 15:57:31 222
原创 NC32 求平方根 等差数列求法 十几行搞定
所以我们求到第一个比k^2大的数,然后让他减一就好了。非常优雅,复杂度只是O(k),也不用二分法。
2024-04-21 21:21:50 155 1
原创 tiny-redis list实现
基于实现的redis,根据书上的API描述,自己实现C++版本的redis。list是常见的数据结构,但是redis有更加抽象的实现,就很,妙,但是也会有很多bug,他用了函数指针,指来指去的。上代码。
2024-04-19 11:39:06 265
原创 tiny-redis SDS实现
基于实现的redis,根据书上的API描述,自己实现C++版本的redis。SDS是redis内部自己实现的数据结构,相较于c的char *,扩宽了内存大小,减少了对内存的申请,更加迅速。上代码。
2024-04-19 11:27:19 394
原创 CS143 PA2 cool语法解析 c++版
{%}%%Rules%%这里的Declarations相当于你的代码解析的时候,用上的一些全局变量和包含的库。%{*//**/%}这里几乎都是c++的代码, fin是读入的文件,string_buf是解析的时候使用的字符数组,*string_buf_ptr是字符指针,curr_lineno是行数,每解析到一个\n (不在字符串里的\n),需要对他加一,这个会现实到token结果的第一个元素里。Definitions 你在匹配的时候使用的一些变量,状态集。LE "<="
2024-03-26 09:15:40 782
原创 CS143 PA1 熟悉Cool语言
2、函数里面要是没有大括号,相当于只能写一个语句,而且不加分号,有大括号,里面可以写多个,每个语句块要加分号,要是有返回值,最后一行写。把每一个命令都抽象成一个指令,碰到e的时候,先判断是不是空,然后执行最顶部的命令就好了,使用了老师推荐的类的抽象,康上去也还可以,扩展也可以。算是快速上手新语言了吧。因为没有数组的概念,刚好看到老师给的示例代码里有list,就想着用list模拟stack就好了。输出4应该就是对的,linux有缓冲区的问题,输出内容比较乱,后面我自己手动输入了一次。4、每个方法之后要加;
2024-03-09 11:52:53 274
原创 手写操作系统 11 信号量和锁实现
李述铜老师的手写,复习笔记。这里需要强调的是原子操作,计算机是需要用硬件来保证,关闭硬件的中断,就是eflags寄存器。
2024-03-06 20:22:33 201 1
原创 手写操作系统 15.7 execve实现
我们看看execve( const char *name, char * const *argv, char * const *env ) 函数,name函数是需要运行函数的文件名,第二个参数是运行文件需要的参数,env是环境变量,储存着地址。这里memory_create_uvm,就是用地址分配器新建一个一级页表,然后把0--0x80000000地址段的一级页表指向操作系统的二级页表,这块代码是共享的。这里的有一个难点,就是两个进程页表不一样,不能通过虚拟地址直接复制,需要通过页表,获取当前的物理地址。
2024-03-06 19:35:15 319 1
原创 cmake 库A依赖库B 找不到对应的函数
写cmake文件的时候,发现了一个奇怪的bug,就是链接库A依赖库B,把库A和库B都链接上去之后,还是显示找不到库。像这样。
2024-03-04 20:41:04 240
原创 qemu-system-i386 库文件libpthread.so.0未定义符号
卸掉snap的 core20即可。snap软件卸掉一点关系都没有(怕的话,提前做个备份)。我卸掉snap之后,除了用软件商店下载的vscode也一起被卸掉了之外,其他的现在看上去没问题。学习李述铜老师的手写操作系统,ubuntu 22 运行下面的命令, 会报错在动态链接库找不到未定义的符号。后来在终端可以正常启动qemu,但是在vscode不行,搜索动态链接库,/usr/bin下面也有这个库。
2024-01-26 10:31:30 269 1
原创 码蹄集 进阶 动态规划部分
dp[i] 表示异或和是i的序列最后一个数字,这个数字尽可能小。举个例子,序列 0001 0010 0100 1000 和序列 0000 1111 他们都满足单调递增序列,这个时候dp[i]=1000 , 取1000和1111最小的数。
2023-07-29 11:45:55 214 1
原创 2022 码蹄杯 部分题解 白银
这道题第一反应是对每个点进行dfs或者bfs,暴力标记所有的点,但是复杂度太高,看了题解之后,发现一种转化的方法。遍历所有的点,当他是上下左右中最大的,其肯定是要挑一次水。给出我的方法,老规矩,用哨兵,减少边界检查。
2023-07-12 09:33:02 804 1
原创 c++ 数组地址 子类向父类自动转型 导致数据错误
发现他们的地址压根不一样,写base[1]会修改a[0]的数据,就像计算机系统的多个未定义的全局变量一样,会任选一个,覆盖后面的。今天写球球大战游戏的时候,用类对代码进行重构,发现一个容易出错的地方,写了一个测试程序。将子类数组son a[]传递给函数时,我们看a[0] a[1] a[2]首地址。
2023-07-05 21:04:10 80
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人