Linux
很黑的黑
这个作者很懒,什么都没留下…
展开
-
error: invalid use of incomplete type ‘DH’ {aka ‘struct dh_st’} 因openssl头文件编译报错问题
error: invalid use of incomplete type ‘DH’ {aka ‘struct dh_st’}原创 2024-07-24 20:23:34 · 253 阅读 · 2 评论 -
suse系统的坑
程序跑了几个月,之前请求路数比较少,所以一直没崩溃,有一个星期五下班前突然多了很多请求,导致程序一直崩溃,测试部找到我,所以只能加班 55555,排查了好多core,看堆栈得不出什么信息,就死鱼一样看着堆栈,毫无办法,突然主要到每一个core文件都是477个线程,这莫不是suse不支持这么多线程数?测试程序单跑没问题,一挂到服务下就崩了,这看来服务的锅啊,service 服务名 status时,瞄到有这么一行,这是改完之后的值(本来是512的),这512不是巧了吗?原创 2022-09-28 14:36:49 · 718 阅读 · 0 评论 -
将windows文件夹挂载到linux机器
执行完在redmi_code目录下就可以操作windows上work_code的文件了,注意linux机器每次重启都要重新执行上面的命令。一、需要有一个windows账号和密码,没有则可以专门为了挂载创建一个共享账号,不影响本来的 windows机器使用。二、右键你想共享的windows文件夹,点击属性-->共享-->共享-->将你的账号拥有这个文件夹的读写所有权。3.4 work_code为你想挂载的windows文件夹名。3.2 password为你想共享的账号的密码。原创 2022-09-09 15:59:16 · 2488 阅读 · 2 评论 -
shell调用请使用绝对路径
调用流程是这样的网页输入参数--->运维程序获取参数写入一个json文件----->运维程序再调一个脚本1---->脚本1调工作程序下的一个脚本2---->脚本2再通过json文件去修改工作程序配置问题:使用网页部署,工作程序的配置文件被被截断,变乱,但是使用工作程序下的脚本2,直 接执行并不会出现这个问题解决:是工作程序下的脚本2,使用的是相对路径 ./, 使用绝对路径解决问题 basepath=$(cd ...原创 2021-09-27 17:25:22 · 472 阅读 · 0 评论 -
g++在编译时就确定运行时动态库路径
完整的参数是-Wl,-rpath=路径(-Wl,-rpath,路径)注意l是小写,两个 - 不能少,逗号不能少报错1:g++: error: unrecognized command line option ‘-WL,-rpath=路径’ L大写导致的报错2:/usr/bin/ld: cannot find rpath=路径: No such file or directory rpath前没加 -(减号) 导致...原创 2021-09-18 11:21:56 · 1761 阅读 · 0 评论 -
使用asan查找程序内存泄露
稍高一些的gcc版本都自带asan了,挺方便的一、编译在你的makefile(没有makefile就在gcc后面加就行)中添加以下选项并进行编译LIBS += -lasanCXXFLAGS += -fsanitize=address -fno-stack-protector -fno-var-tracking -fno-omit-frame-pointer二、运行1.如果直接在终端运行 ./程序名 会提示你(不一定相同,但下列步骤是一样的)==10987==ASan runti.原创 2021-07-14 15:40:18 · 8827 阅读 · 2 评论 -
ubuntu16.04编译运行crtmpserver开源软件
本来是装了个ubuntu20.04的,比较喜欢新版本的风格,结果新版本折腾了半天都没装好,最后在ubuntu中鼠标键盘都不能使用了,网上也没找到合适的解决方法,最后一气之下卸载了。先说下ubuntu20.04中遇到的坑吧1、没有预装gcc和g++2、会把警告当做错误,把crtmpserver-centosinit/builders/cmake/CMakeLists.txt中149行SET(GENERIC_FLAGS "-Wall -Werror") 改成SET(GENERIC_FLAGS "原创 2021-07-01 21:25:18 · 163 阅读 · 0 评论 -
学习线程池,可变参数输入
最近在写项目时,用了一个别人的线程池,但是只能传固定参数,用起来很麻烦,但自己也懒得(不会)去替换了,利用空闲时间在网上找了一份可变参数线程池代码,我也不知道哪个博客是一手作者了,在下面贴作者的github地址,原作者的仓库中有read.me,大家可以看看原作者GitHub地址删除了window.h,a.afun()改成了A::afun()在linux下执行下列命令,可编译过g++ Main.cpp -std=c++11 -pthreadthreadpool.h#ifndef.转载 2021-04-21 16:17:41 · 213 阅读 · 0 评论 -
用c++ boost库实现定时循环跑一个函数
在工作中遇到一个问题,本来准备弄个定时器,隔一段时间就去跑一个函数,刷新数据的,最后还是把任务交给了前端,但是在网上查询了资料,可以想下面这么写,就可以一直跑了,先做个总结,以后还是会用到的。#include<boost/asio.hpp>#include<boost/date_time/posix_time/posix_time.hpp>#include<...原创 2019-11-01 14:46:35 · 2195 阅读 · 0 评论 -
使一段代码第一次执行和以后执行结果不同
在学习《C专家编程》时,遇到了这段代码非常的有意思。void generate_initializer(char * string){ static char separator = ' '; printf(" %c %s \n",separator,string); separator = ',';}在第一次执行时,函数首先打印一个空格,然后打印一个初始化字符串。所有后续的初...原创 2018-09-27 15:03:40 · 547 阅读 · 0 评论 -
结构体数组作为函数参数
把结构体数组名作为函数的一个参数,然后在这个函数的函数里面继续作为参数,把一个值赋给这个结构体数组的一个变量,我再赋值的地方是有值的,在函数里面也是有值的,但是出了这个函数回到主函数时,这个结构体数组的变量的值就为空了。为什么呢?因为我在使用这个函数是这样的,iReturn = ParseAllEitSection(&stTransportParameter,pfTsFile,iTsP...原创 2018-09-21 08:29:27 · 9962 阅读 · 0 评论 -
C++中resize函数和reserve函数
函数原型:void resize (size_type n);void resize (size_type n, const value_type& val);第一个参数是将容器的元素变成n个,第二个参数是将这n个元素变成val(没有就是默认值)注意:resize不适用于array如果当前大小大于所要求的大小,容器后部的元素会被删除;如果当前大小小于新大小,会将新元素添加到容器后部。个人原创 2017-12-25 10:44:18 · 9476 阅读 · 0 评论 -
多进程通信之消息队列
最近项目里要用到消息队列,服务器从串口获取数据,再通过TCP发送给APP。此文借鉴于:http://blog.csdn.net/ljianhui/article/details/10287879一、什么是消息队列消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法。 每个数据块都被认为含有一个类型,接收进程可以独立地接收含有不同类型的数据结构。我们可以通过发送消息来避免命原创 2017-11-08 15:13:03 · 552 阅读 · 0 评论 -
/usr/bin/ld:cannot open output file a.out: Permission denied collect2: ld returned 1 exit status
今天运行多进程间通信之消息队列的可执行程序时,遇到了段错误,然后我想再次编译源码时就报错:/usr/bin/ld: cannot open output file a.out: Permission deniedcollect2: ld returned 1 exit status我的可执行程序文件名加a.out,这是因为什么原因呢?翻译过来是这样的:/ usr原创 2017-11-08 10:49:38 · 7730 阅读 · 1 评论 -
父子进程间的共享内存通信
父子进程间的共享内存通信顾名思义,共享内存就是允许两个不相关的进程访问同一个逻辑内存。共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常安排为同一段物理内存。进程可以将同一段共享内存连接到它们自己的地址空间中,所有进程都可以访问共享内存中的地址,就好像它们是由用C语言函数malloc分配的内存一样。而如果某个进程向共享内存写入数据,所做的改动将立即影响到可以访问同一段共享内存的任何其他进程。原创 2017-11-06 19:23:56 · 9978 阅读 · 0 评论 -
用宏来选择不同的代码段
用宏来选择不同的代码段,也就是所谓的条件编译1、第一种形式#ifdef 标识符程序段1#else程序段2#endif如果标识符已被#define语句定义过,则编译程序段1,否则编译程序段2。2、第二种形式#ifndef 标识符程序段1#else程序段2#endif如果标识符未被#define语句定义过,则编译程序段1,否则编译程序段2。与第一种形式刚好相反。3、第三种形式#if 常量表达式程序段1#else程序段2#endif如果常量表达式的值为真(原创 2017-11-06 20:19:28 · 929 阅读 · 0 评论 -
通俗理解信号量
大家都知道,计算机有了操作系统后性能大幅度提升,其根本原因就在于实现了进程的并发运行。多个并发的进程彼此之间围绕着紧俏的资源产生了两种关系,同步或互斥。而信号量正式解决资源竞争的最有效途径。比如记录资源的数量,等待资源的进程数,等待资源的进程阻塞队列在哪,当然最重要的是信号量还代表这个资源是互斥的。比如信号量S=3代表资源目前还有3个,没有进程阻塞;S=-2代表资源已经都被占用,且阻塞队列转载 2017-09-23 19:16:38 · 931 阅读 · 1 评论