首页 › 作者存档 › 第七根弦

QT5.13之后的版本需要自行编译Mysql的driver

前言

QT5.13版本后无法使用Mysql。


一、Mysql缺少报错

1.在QT中使用

2.然后会报以下错误:

继续阅读 »

树莓派samba配置文件的一些说明

设置无需用户名密码直接可访问、读写:

在配置文件 /etc/samba/smb.conf最后添加如下内容,再重启samba

继续阅读 »

Raspberry Pi 树莓派安装64位系统打造全功能NAS [全网最正确操作记录]

安装树莓派64位系统

下载树莓派64位系统,我不要桌面所以选择了lite
https://downloads.raspberrypi.org/raspios_lite_arm64/images/raspios_lite_arm64-2020-08-24/2020-08-20-raspios-buster-arm64-lite.zip

用USB Image Tool将镜像写入TF卡(Win32DiskImager只是个垃圾)
用法很简单:插入tf卡,在USB Image Tool左侧选好盘,右侧使用“Restore”将raspios-buster-arm64-lite.img镜像写入tf卡即可。

树莓派开启ssh服务

写入完成后,在资源管理器里会多出一个boot盘符,在boot分区下新建一个空文件,名为ssh,就可以给树莓派开启SSH服务,适合没屏幕操作。

树莓派自动链接wifi

在boot分区下新建wpa_supplicant.conf文件,并写入无线的相关配置。可以同时配置多个无线网络。

继续阅读 »

Qt5–编译与安装

工欲善其事,必先利其器。学习任何框架,下载安装总是第一步。Qt因为开发源码,所以有直接安装和源码安装两种方式,建议是第一次先直接安装,如果后面需要重新编译特定的模块,或者需要静态库,再额外的编译源码。至于IDE,我推荐使用Qt自带的QtCreator。
继续阅读 »

Qt最新版5.15.1在Win10环境静态编译安装和部署的完整过程(VS2019)

本文本来是记录Qt5.12.2编译部署过程,目前Qt5系列的最后一个LTS版发布,这个版本没有提供离线安装版,要是用必须使用在线安装。这两天编译Qt5.15.1发现编译步骤没有什么变化,所以就改一个标题。

一、为什么要静态编译

用QtCreator编译程序时,使用的是动态编译。编译好的程序在运行时需要另外加上相应的Qt库文件,一大堆dll文件。如果想将生成的程序连同所需要的库一起完整地打包成一个可执行程序,那就需要使用静态编译。Qt官方不提供静态编译好的安装包,所以需要我们在自己的电脑上静态编译。而且exe文件会比动态编译的要小上很多。
继续阅读 »

oracle 利用shell脚本自动执行raman热备(全量和增量)

1、不废话直接上脚本
vim oracle_rman_bak.sh
#!/bin/sh
source /home/oracle/.bash_profile

if [ -z $1 ]
then
echo “Please Input a number,Usage: 0|1|2”
exit
else
RMAN_LEVEL=$1
fi

export ORACLE_SID=jkdata
export TODAY=date '+%Y%m%d'
export RMAN_DIR=/data/backup/oracledata/rmanbak/$ORACLE_SID/$TODAY-$RMAN_LEVEL
#######
mkdir -p $RMAN_DIR
cd $RMAN_DIR
LogFile=ora_rman_bk_$ORACLE_SID-L$RMAN_LEVEL-date '+%Y%m%d'.log

# rman backup
rman target / msglog=$RMAN_DIR/$LogFile<<EOF
delete noprompt obsolete;
CONFIGURE BACKUP OPTIMIZATION ON;
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO ‘$RMAN_DIR/cf%F’;
run {
allocate channel c1 type disk;
allocate channel c2 type disk;
backup as compressed backupset incremental level $RMAN_LEVEL filesperset 3 tag ‘dbL$RMAN_LEVEL’ format ‘$RMAN_DIR/ora_o_%d_%t_%c%s%p%u’
database skip readonly include current controlfile;
sql ‘alter system archive log current’ ;
backup(archivelog all format ‘$RMAN_DIR/ora_a_%d_%t_%c%s%p%u’ delete input);
release channel c1;
release channel c2;
}

list backup;
exit;
EOF

#mail backup log
mail -s “$ORACLE_SID rman L$RMAN_LEVEL backup log $TODAY” [email protected] <$RMAN_DIR/$LogFile

 

2、在crontab 中设置如下:
0 4 * * 5 sh /home/oracle/backup_scripts/oracle_rman_bak.sh 0 > /data/backup/oracledata/logs/rman.log 2>&1
0 4 * * 2 sh /home/oracle/backup_scripts/oracle_rman_bak.sh 1 > /data/backup/oracledata/logs/rman.log 2>&1

Auto packing the repository in background for optimum performance

git运行突然提示
Auto packing the repository in background for optimum performance

查资料,原来是自己本地一些 “悬空对象”太多(git删除分支或者清空stash的时候,这些其实还没有真正删除,成为悬空对象,我们可以使用merge命令可以从中恢复一些文件)

解决:
1.输入命令:git fsck –lost-found,可以看到好多“dangling commit”
2.清空他们:git gc –prune=now,完成

expdp/impdp 数据泵导入导出

业务场景:

在工作中,涉及到oracle数据库迁移,使用navicat等其他工具 容易报错,一系列问题很麻烦,今天记录一下操作流程及个人理解(文章参考了很多文档和博客);
EXPDP数据导出

请自行修改目录路径和自定义的表名,否则出现错误很难查找~

一般expdp流程:

一、新建逻辑目录

最好以system等管理员创建逻辑目录,Oracle不会自动创建实际的物理目录“D:\oracleData”(务必手动创建此目录),仅仅是进行定义逻辑路径dump_dir;

忘记sys用户密码的可以去下如何修改sys用户密码;

建议使用pl、navicat等oracle操作工具来操作;
继续阅读 »

宏定义转字符串

 

输出

(C语言)多进程实现消费者生产者pv操作(Windows和Linux版本)

多进程实现消费者生产者问题

一,实验目的
1,了解生产者消费者的互斥与同步问题
2,掌握Windows和Linux的进程通信方法

二,实验要求
完成Windows版本和Linux版本。
一个大小为3的缓冲区,初始为空。
2个生产者
随机等待一段时间,往缓冲区添加数据,
若缓冲区已满,等待消费者取走数据后再添加
重复6次

3个消费者
随机等待一段时间,从缓冲区读取数据
若缓冲区为空,等待生产者添加数据后再读取
重复4次

显示每次添加和读取数据的时间及缓冲区的状态

三,实验环境
Windows版本:Windows 10 64位系统,Dev-cpp编译器
Linux版本:Fedora29版本,gcc环境 vim文本编辑器

四,实验代码结构
1),pv操作伪代码:
array[3]:interger//缓冲区定义,大小为三
int empty=3,full=0;
int mutex=1;
i=0,j=0//缓冲区指针
x,y:item //产品变量
生产者: 消费者:
begin:
produce a product to x;
P(empty);
P(mutex);
array[i]=x;
ii=(i+1)%3;
V(full);
V(mutex);
,,,,,, ………,
End

消费者:

2)实验代码分析

Windows版本:

思路分析:Windows创建多进程使用creatprocess()函数调用自己,通过多次创建得到两个生产者进程三个消费者进程,在之中运行相应的生产者函数,消费者函数。在通过传入参数不同,来辨别是第一次主进程还是生产者进程,消费者进程。通过构建共享内存区进行进程间通信。

①多进程创建

② 构建共享内存区,再将文件映射到本进程,初始化

③在主创建进程间信号量full empty

分别在生产者消费者进程创建互斥访问量mutex

④同过argv量的不同判断进程归属

⑤运行结果:

全部代码见后

Linux版本:

思路分析:Linux使用fork进行多进程创建,分别在进程中运行消费者函数,生产者函数。建立共享主存区很信号量在进程建进行通信和缓存访问

②建立共享主存并进行映射

③创建进程间信号量full,empty和互斥量 mutex,并初始化

④实验结果:

五, 实验总结

本次实验获得圆满成功。

本次实验通过分别编写Windows和Linux版本的多进程实现消费者和生产者问题,了解生产者消费者的互斥与同步问题,掌握Windows和Linux的进程通信方法,也同时加强自己对多进程操作的理解。

代码:
Windows版本:

Linux版本: