Ubuntu 上配置 QtQuick/QML 开发环境

安装以下包:

1sudo apt install qtbase5-dev              # Qt5 基础开发包
2sudo apt install qtquickcontrols2-5-dev   # QtQuick 基础开发包
3sudo apt install qtdeclarative5-dev       # Qt5 的 CMake 模块
4
5sudo apt install qtcreator                # Qt Creator
6sudo apt install qttools5-dev             # Qt5 工具,包含 Qt5Designer、Qt5LinguistTools 等
查看全文

编译 Qt 源码,没有生成 libqxcb.so 的问题

Qt 通过不同的插件,在不同的平台上进行显示,例如:

  • libqlinuxfb.so 用于 Frame Buffer
  • libqxcb.so 用于 X11
  • libqwayland-generic.so 用于 Wayland

构建 X11 插件需要依赖许多 xcb 的开发包,可以通过下面的命令安装:

Qt 5.15.2:

查看全文

让 QMediaPlayer 使用代理

QMediaPlayer 使用简介

使用 QMediaPlayer::setSource 设置媒体源,即可进行播放:

1player = new QMediaPlayer;
2audioOutput = new QAudioOutput;
3player->setAudioOutput(audioOutput);
查看全文

Gio::DBus 中创建复合类型的参数

首先,需要知道两个基本知识:

  • 每一个参数都需要被包装为 Variant。
  • 全体参数需要被整体包装成一个 Tuple。

即使只有一个参数也需要包装为 Tuple,例如一个 string:

1const auto arg1 = Glib::Variant<Glib::ustring>::create("hello world");
2Glib::VariantContainerBase args = Glib::VariantContainerBase::create_tuple(arg1);
查看全文

Linux C API 获取广播地址

广播地址通常为网段的最后一个地址

通过对一个 socket 进行 ioctl(SIOCGIFBRDADDR) 即可获取广播地址。

1struct ifreq req;
2strcpy(req.ifr_name, "网卡名");
3ioctl(sock, SIOCGIFBRDADDR, &req);
查看全文

Linux C API 获取本机的 IP 地址

方法1:遍历网卡

1#include <stdio.h>      
2#include <ifaddrs.h>
3#include <arpa/inet.h>
4
5int main (void) 
查看全文

Linux Hook 技术

Hook 是一种覆盖重写进程中符号的技术,在 Linux 中,通过环境变量 LD_PRELOAD 预加载包含同名符号的动态库即可实现。

覆盖 malloc 和 free 检查内存泄漏

1// 文件名: memcheck.c
2// 编译命令: gcc -o memcheck.so memcheck.c --shared -fPIC
3#define _GNU_SOURCE
查看全文

怎样 detach 子进程

通过 fork 创建进程后,父进程可以使用 waitpid 来获取子进程的结束状态。 如果子进程先于父进程退出,而父进程没有调用 waitpid 的话,子进程将一直存续下去以保持结束状态可以被获取。 此时,子进程被称为僵尸进程

如果子进程没有被调用 waitpid 而父进程退出了,此时子进程被称为孤儿进程,它会被 init进程(PID为1) 领养并调用waitpid回收。

有时我们并不关心子进程的结束状态,希望像 pthread_detach 一样示释放子进程。有以下两种方法可以实现:

查看全文

调用 PAM 进行认证

1// gcc main.c -lpam
2
3#include <stdio.h>
4#include <stdlib.h>
5#include <string.h>
6#include <unistd.h>
7#include <termio.h>
查看全文

通过 ALSA 显示音频设备的声道

1// apt install libasound2-dev
2// LDFLAGS := -lasound
3#include <stdio.h>
4#include <stdlib.h>
5#include <alsa/asoundlib.h>
6
7int main(int argc, char* argv[])
查看全文