SQLite3 数据库学习(六):Qt 嵌入式 Web 服务器详解

news2024/11/15 14:03:27

参考引用

  • SQLite 权威指南(第二版)
  • SQLite3 入门

1. Apache 搭建 cgi 环境

1.1 什么是 Apache

  • Apache 是世界使用排名第一的 Web 服务器软件
    • 它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用

1.2 具体搭建流程

通浏览器 /Qt 程序访问 apache2 后的 cgi 程序
在这里插入图片描述

  • 1、安装 apache2 服务器

    $ sudo apt install apache2
    
  • 2、测试是否安装成功

    • 在浏览器中输入虚拟机 ip 地址,显示下图则表示安装成功
      在这里插入图片描述
  • 3、配置 apache2 支持 cgi 程序

    • 进入 /etc/apache2/mods-enabled 目录下,把 cgi 配置文件创建软连接到当前目录下
    $ cd /etc/apache2/mods-enabled
    $ sudo ln -s ../mods-available/cgid.conf cgid.conf
    $ sudo ln -s ../mods-available/cgid.load cgid.load
    $ sudo ln -s ../mods-available/cgi.load cgi.load
    
    • 在 apache2.conf 文件最前面添加 ServerName 127.0.0.1
    $ cd /etc/apache2/
    $ sudo vim apache2.conf 
    
    • 重启 apache
    $ sudo apachectl restart
    
    • 进入 /usr/lib/cgi-bin/ 目录下写 cgi 程序(c/c++ 语言程序)并编译
    $ cd /usr/lib/cgi-bin/
    $ sudo vim main.c
    $ sudo gcc -o main.cgi main.c
    
    // main.c
    #include <stdio.h>
    int main(void) {
        printf("Content-type:text/html;charset=utf-8\n\n");  // 防止乱码
        printf("hello world\n\n");
        printf("hello world\n\n");
        printf("hello world\n\n");
    
        return 0;
    }
    
    • 查看放置 cgi 程序的目录(无需操作,了解即可)
    $ cd /etc/apache2/conf-enabled
    $ vim serve-cgi-bin.conf
    

在这里插入图片描述

  • 4、测试
    在这里插入图片描述

2. cgi 接收客户端的数据

访问 cgi 程序并且把 number=100 参数传递给 cgi 程序

  • 浏览器 get 请求:实际是 GET,它将数据打包放置在环境变量 QUERY_STRING 中作为 URL 整体的一部分传递给服务器,cgi 通过获取环境变量得到数据
  • 在 cgi 程序中查询环境变量获取数据
    // main.c
    #include <stdio.h>
    #include <stdlib.h>
    
    int main(void) {
        printf("Content-type:text/html;charset=utf-8\n\n");
    
        char *str = getenv("QUERY_STRING");  //str = "number=100";
        if (str == NULL) {
            printf("arg error\n\n");
        } else {
            //str = "number=100";
            int data = 0;
            sscanf(str, "number=%d", &data);  // 解析出 100 存储在 data 中
            printf("hello world %d^2=%d\n\n", data, data*data);
        }
    
        return 0;
    }
    

在这里插入图片描述

以下内容待更新…


3. Qt 访问 cgi 程序

4. Qt 获取 linux 目录

5. Qt 通过 cgi 登录注册

6. Qt 通过 cgi 访问数据库和 linux 命令

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1243354.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

代码随想录算法训练营Day 59 || 503.下一个更大元素II、42. 接雨水

503.下一个更大元素II 力扣题目链接(opens new window) 给定一个循环数组&#xff08;最后一个元素的下一个元素是数组的第一个元素&#xff09;&#xff0c;输出每个元素的下一个更大元素。数字 x 的下一个更大的元素是按数组遍历顺序&#xff0c;这个数字之后的第一个比它更…

数据中台建设方法论

1、数仓的概念和了解--业务的痛点 产生的痛点&#xff1a;数据资产比较模糊、数据的质量比较低、重复建设、代码的耦合性比较强。 2、数据仓库中的常见的模型&#xff1a; 1、心型模型&#xff1a;中间是一张事实表&#xff0c;周围都是维度表。 对于心型模型的主要的特点&a…

可上手 JVM 调优实战指南

文章目录 为什么要学 JVM一、JVM 整体布局二、Class 文件规范三、类加载模块四、执行引擎五、GC 垃圾回收1 、JVM内存布局2 、 JVM 有哪些主要的垃圾回收器&#xff1f;3 、分代垃圾回收工作机制 六、对 JVM 进行调优的基础思路七、 GC 情况分析实例八、最后总结 全程可上手JVM…

快速了解敏捷测试!解密敏捷测试的难点!

随着敏捷开发模式的普及&#xff0c;越来越多的测试同仁也开始了敏捷测试。那么究竟什么是敏捷测试&#xff1f;敏捷测试与传统测试的主要区别是什么&#xff1f;敏捷测试的难点又是什么&#xff1f;本文会对这三个问题进行讲解。注意&#xff1a;本文只是讲解敏捷测试概念相关…

String 、StringBuffer 和 StringBuilder 的区别?

String 使用 String 声明一个字符串的时候&#xff0c;该字符串会存放在堆中的字符串常量池中。因为在java中所有的String 都是以常量表示&#xff0c;且由 final 修饰&#xff0c;因此在线程池中它的线程是安全的 且 不可变的 。每个 String 在被创建后就不再发生任何变化。 …

新王加冕,GPT-4V 屠榜视觉问答

当前&#xff0c;多模态大型模型&#xff08;Multi-modal Large Language Model, MLLM&#xff09;在视觉问答&#xff08;VQA&#xff09;领域展现了卓越的能力。然而&#xff0c;真正的挑战在于知识密集型 VQA 任务&#xff0c;这要求不仅要识别视觉元素&#xff0c;还需要结…

【SpringMVC】 对请求的不同响应

前言 本文学习如何运用不同的注解来返回不同的响应. 1.返回静态页面Controller 返回index.html页面 Controller 和 RestController的区别 controller 只有加上这个注解,Spring才会帮我们管理这个代码.后续我们访问时才能访问到. RestController 等同于 Controller ResponseBo…

前端学习--React(3)

一、Redux 集中状态管理工具&#xff0c;不需要react即可使用&#xff0c;每个store的数据都是独立于组件之外的 vue小链接&#xff1a;vuex/pinia 基本使用 Redux将数据修改流程分成三个概念&#xff0c;state、action和reducer state - 一个对象 存放我们管理的数据状态 a…

EI论文故障识别程序:DBN深度置信/信念网络的故障识别Matlab程序,数据由Excel导入,直接运行!

​适用平台&#xff1a;Matlab2021b版及以上 本程序参考中文EI期刊《基于变分模态分解和改进灰狼算法优化深度置信网络的自动转换开关故障识别》中的深度置信网络&#xff08;Deep Belief Network&#xff0c;DBN&#xff09;部分进行故障识别&#xff0c;程序注释清晰&#x…

OpenStack云计算平台-Networking 服务

目录 一、网络服务概览 二、网络&#xff08;neutron&#xff09;概念 三、安装并配置控制节点 1、先决条件 2、配置网络选项&#xff08;公共网络&#xff09; &#xff08;1&#xff09;安装组件 &#xff08;2&#xff09;配置服务组件 &#xff08;3&#xff09;配…

Notepad-- ubuntu下载安装

Notepad-- ubuntu下载安装 下载 Gitee链接&#xff1a; https://gitee.com/cxasm/notepad– 安装 sudo apt install *.deb运行 /opt/apps/com.hmja.notepad/files/Notepad--出错 需要安装qt5 sudo apt-get install qt5-default

【UE】用样条线实现测距功能(下)

目录 效果 步骤 一、实现多次测距功能 二、通过控件蓝图来进行测距 在上一篇&#xff08;【UE】用样条线实现测距功能&#xff08;上&#xff09;&#xff09;文章基础上继续实现多次测距和清除功能。 效果 步骤 一、实现多次测距功能 打开蓝图“BP_Spline”&#xff0c…

UML建模图文详解教程05——包图

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl本文参考资料&#xff1a;《UML面向对象分析、建模与设计&#xff08;第2版&#xff09;》吕云翔&#xff0c;赵天宇 著 包图概述 包图(package diagram)是用来描述模型中的…

DAOS低时延与高性能RDMA网络

什么是RDMA RDMA&#xff08;Remote Direct Memory Access&#xff09;远程直接内存访问是一种技术&#xff0c;它使两台联网的计算机能够在主内存中交换数据&#xff0c;而无需依赖任何一台计算机的处理器、缓存或操作系统。与基于本地的直接内存访问 ( DMA ) 一样&#xff0c…

抖音本地生活服务商申请怎么做?无保证金的申请方法来了

想做抖音的本地生活服务项目&#xff0c;却不知道去哪里申请&#xff0c;或者如何申请&#xff0c;其实&#xff0c;官方的通道在今年上半年还是有的&#xff0c;自己去平台上提交资料申请就可以了&#xff0c;但需要缴纳高额的保证金。 而在今年下半年&#xff0c;平台已经关…

SPS简单对应分析

前言&#xff1a; 本专栏参考教材为《SPSS22.0从入门到精通》&#xff0c;由于软件版本原因&#xff0c;部分内容有所改变&#xff0c;为适应软件版本的变化&#xff0c;特此创作此专栏便于大家学习。本专栏使用软件为&#xff1a;SPSS25.0 本专栏所有的数据文件请点击此链接下…

【算法】经典算法题

文章目录 专题一&#xff1a;双指针1. 移动零2. 复写零3. 快乐数4. 盛最多水的容器5. 有效三角形的个数6. 查找总价格为目标值的两个商品7. 三数之和8. 四数之和 专题二&#xff1a;滑动窗口1. 长度最小的子数组2. 无重复字符的最长字串3. 最大连续1的个数 III4. 将 x 减到 0 的…

【尚跑】2023泾阳半程马拉松144 PB完赛

1、赛事背景 来到泾阳&#xff0c;就来到了中国大地原点&#xff1b; 来到泾阳&#xff0c;就来到了陕西的“白菜心心”&#xff1b; 来到泾阳&#xff0c;就来到了具有2000多年的历史长河&#xff1b; 泾河水缓缓流&#xff0c;流过郑国渠&#xff1b; 泾河水缓缓流&…

线程提交线程到线程池,有几种方式,哪一种方式是工作中不能使用的,无法捕捉异常,线程池的拒绝策略,线程池的提交方式

线程池的工作原理 JDK中提交线程到线程池&#xff0c;有几种方式&#xff0c;哪一种方式是工作中不能使用的&#xff0c;无法捕捉异常 两种提交任务的方法 ExecutorService 提供了两种提交任务的方法&#xff1a; execute()&#xff1a;提交不需要返回值的任务 submit()&a…