C++ 网络编程项目fastDFS分布式文件系统(四)-fastCGI项目相关技术以及linux搜狗输入法相关问题。
目录
1. Nginx作为web服务器处理请求
2. http协议复习
Get方式提交数据
Post方式提交数据
3. fastCGI
3.1 CGI
3.2 fastCGI
3.3 fastCGI和spawn-fcgi安装
1. 安装fastCGI
2. 安装spawn-fcgi
3.4 nginx && fastcgi
4其他知识点
1. fastCGI环境变量 - fastcgi.conf
2. 客户端使用Post提交数据常用方式
3. strtol 函数使用
4linux 搜狗输入法不能使用的的问题
问题
解决方法
5 共享库找不到的问题
1. Nginx作为web服务器处理请求
1. 静态请求
客户端访问服务器的静态网页, 不涉及任何数据的处理, 如下面的URL:
http://localhsot/login.html
# 使用 get 方式提交数据得到的 urlhttp: //localhost/login?user=zhang3&passwd=123456&age=12&sex=man- http: 协议- localhost: 域名- /login: 服务器端要处理的指令- ? : 连接符 , 后边的内容是客户端给服务器提交的数据- & : 分隔符动态的 url 如何找服务器端处理的指令 ?- 去掉协议- 去掉域名 /IP- 去掉端口- 去掉 ? 和它后边的内容
# 如果看到的是请求行 , 如何找处理指令 ?POST /upload/UploadAction HTTP/1.1GET /?username=tom&phone=123&email=hello%40qq.com&date=2018-01-01&sex=male&class=3&rule=on HTTP/1.11. 找请求行的第二部分- 如果是 post, 处理指令就是请求行的第二部分- 如果是 get, 处理指令就是请求行的第二部分 , ? 以前的内容
2. http协议复习
四部分 : 请求行 , 请求头 , 空行 , 请求数据请求行 : 说明请求类型 , 要访问的资源 , 以及使用的 http 版本请求头 : 说明服务器要使用的附加信息空行 : 空行是必须要有的 , 即使没有请求数据请求数据 : 也叫主体 , 可以添加任意的其他数据
Get方式提交数据
第一行 : 请求行第 2-9 行 : 请求头 ( 键值对 )第 10 行 : 空行get 方式提交数据 , 没有第四部分 , 提交的数据在请求行的第二部分 , 提交的数据会全部显示在地址栏中
GET /?username=tom&phone=123&email=hello%40qq.com&date=2018-01-01&sex=male&class=3&rule=on HTTP/1.1Host: 192.168.26.52:6789Connection: keep-aliveCache-Control: max-age=0Upgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36(KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8Accept-Encoding: gzip, deflateAccept-Language: zh,zh-CN;q=0.9,en;q=0.8
Post方式提交数据
第一行 : 请求行第 2 -12 行 : 请求头 ( 键值对 )第 13 行 : 空行第 14 行 : 提交的数据
POST / HTTP/1.1Host: 192.168.26.52:6789Connection: keep-aliveContent-Length: 84Cache-Control: max-age=0Upgrade-Insecure-Requests: 1Origin: nullContent-Type: application/x-www-form-urlencodedUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36(KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8Accept-Encoding: gzip, deflateAccept-Language: zh,zh-CN;q=0.9,en;q=0.8username=tom&phone=123&email=hello%40qq.com&date=2018-01-01&sex=male&class=3&rule=on
四部分 : 状态行 , 消息报头 , 空行 , 响应正文状态行 : 包括 http 协议版本号 , 状态码 , 状态信息消息报头 : 说明客户端要使用的一些附加信息空行 : 空行是必须要有的响应正文 : 服务器返回给客户端的文本信息
第一行 : 状态行第 2 -11 行 : 响应头 ( 消息报头 )第 12 行 : 空行第 13-18 行 : 服务器给客户端回复的数据
HTTP/1.1 200 OkServer: micro_httpdDate: Fri, 18 Jul 2014 14:34:26 GMT/* 告诉浏览器发送的数据是什么类型 */Content-Type: text/plain; charset=iso-8859-1 ( 必选项 )/* 发送的数据的长度 */Content-Length: 32Location: urlContent-Language: zh-CNLast-Modified: Fri, 18 Jul 2014 08:36:36 GMTConnection: close#include <stdio.h>int main(void){printf("hello world!\n");return 0;}
3. http状态码
状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别 :1xx :指示信息 -- 表示请求已接收,继续处理2xx :成功 -- 表示请求已被成功接收、理解、接受3xx :重定向 -- 要完成请求必须进行更进一步的操作4xx :客户端错误 -- 请求有语法错误或请求无法实现5xx :服务器端错误 -- 服务器未能实现合法的请求
3. fastCGI
3.1 CGI
通用网关接口 ( C ommon G ateway I nterface/ CGI ) 描述了客户端和服务器程序之间传输数据的一种标准 ,可以 让一个客户端,从网页浏览器向执行在网络服务器上的程序请求数据。CGI 独立于任何语言的, CGI 程序可以用 任何 脚本语言 或者是完全独立 编程语言 实现,只要这个语言可以在这个系统上运行。

服务器可以解析出来数据,但是不能处理里面的数据的内容。

http://localhost/login?user=zhang3&passwd=123456&age=12&sex=man1. 用户通过浏览器访问服务器 , 发送了一个请求 , 请求的 url 如上2. 服务器接收数据 , 对接收的数据进行解析3. nginx 对于一些登录数据不知道如何处理 , nginx 将数据发送给了 cgi 程序。服务器端会创建一个cgi进程4. CGI 进程执行加载配置, 如果有需求加载配置文件获取数据连接其他服务器: 比如数据库,验证数据逻辑处理:得到结果, 将结果发送给服务器退出5. 服务器将 cgi 处理结果发送给客户端在服务器端 CGI 进程会被频繁的创建销毁服务器开销大, 效率低
CGI 链接其他服务器的过程。
3.2 fastCGI
快速通用网关接口(Fast Common Gateway Interface/ FastCGI )是 通用网关接口 (CGI)的改进,描述了客户端和服务器程序之间传输数据的一种标准。 FastCGI 致力于减少 Web 服务器 与 CGI 程式 之间互动的开销,从而使 服务器 可以同时处理更多的 Web 请求 。与为每个请求创建一个新的进程不同, FastCGI 使用持续的进程来处理一连串的请求。这些进程由FastCGI 进程管理器管理,而不是 web 服务器。
fastCGI与CGI的区别:
CGI 就是所谓的短生存期应用程序, FastCGI 就是所谓的长生存期应用程序。 FastCGI 像是一个常驻 (long-live) 型的CGI,它可以一直执行着,不会每次都要花费时间去 fork 一次

http://localhost/login?user=zhang3&passwd=123456&age=12&sex=man
1. 用户通过浏览器访问服务器 , 发送了一个请求 , 请求的 url 如上2. 服务器接收数据 , 对接收的数据进行解析3. nginx 对于一些登录数据不知道如何处理 , nginx 将数据发送给了 fastcgi 程序通过本地套接字网络通信的方式4. fastCGI 程序如何启动不是有web 服务器直接启动通过一个fastCGI 进程管理器启动5. fastcgi 启动加载配置 - 可选连接服务器 - 数据库循环服务器有请求 -> 处理将处理结果发送给服务器本地套接字网络通信没有请求 -> 阻塞6. 服务器将 fastCGI 的处理结果发送给客户端
3.3 fastCGI和spawn-fcgi安装
1. 安装fastCGI
./configuremake- fcgio.cpp:50:14: error: 'EOF' was not declared in this scope- 没有包含对应的头文件 :- stdio.h - c- cstdio - > c ++找到![]()
最开始地方包含头文件,就可以完成了。
make 之后已经生成了动态库了,但是在本地的隐藏文件下面,所以需要执行makefile 将这些文件库拷贝对应的库文件下面就可以了。
sudo make install ##将对应的动态库拷贝到对应的系统目录下面去。![]()
2. 安装spawn-fcgi
(fastcgi的进程管理器)
同上。
./configuremakesudo make install
3.4 nginx && fastcgi
nginx 不能像 apache 那样直接执行外部可执行程序,但 nginx 可以作为代理服务器,将请求转发给后端服务器,这也是nginx 的主要作用之一。其中 nginx 就支持 FastCGI 代理,接收客户端的请求,然后将请求转发给后端 fastcgi进程。下面介绍如何使用C/C++ 编写 cgi/fastcgi ,并部署到 nginx 中。通过前面的介绍知道,fastcgi 进程由 FastCGI 进程管理器管理,而不是 nginx 。这样就需要一个 FastCGI 管理,管理我们编写fastcgi 程序。我们使用 spawn-fcgi 作为 FastCGI 进程管理器。 spawn-fcgi是一个通用的 FastCGI 进程管理器,简单小巧,原先是属于 lighttpd 的一部分,后来由于使用比较广泛,所以就迁移出来作为独立项目了。spawn-fcgi 使用 pre-fork 模型, 功能主要是打开监听端口,绑定地址,然 后fork-and-exec 创建我们编写的 fastcgi 应用程序进程,退出完成工作 。 fastcgi 应用程序初始化,然后进入死循环侦听socket 的连接请求。

http://localhost/login?user=zhang3&passwd=123456&age=12&sex=man
1. 客户端访问 , 发送请求2. nginx web 服务器 , 无法处理用户提交的数据3. spawn-fcgi - 通信过程中的服务器角色被动接收数据在spawn-fcgi 启动的时候给其绑定 IP 和端口4. fastCGI 程序程序猿写的 -> login.c -> 可执行程序 ( login )使用 spawn-fcgi 进程管理器启动 login 程序 , 得到一进程
1. nginx的数据转发 - 需要修改nginx的配置文件 nginx.conf
通过请求的 url http ://localhost/ login?user = zhang3&passwd = 123456&age = 12&sex = man 转换为一个 指令 :- 去掉协议- 去掉域名 / IP + 端口- 如果尾部有文件名 去掉- 去掉 ? + 后边的字符串- 剩下的就是服务器要处理的指令 : / loginlocation / login{# 转发这个数据 , fastCGI 进程fastcgi_pass 地址信息 : 端口 ;#fastcgi_pass localhost:8888# fastcgi.conf 和 nginx.conf 在同一级目录 : /usr/local/nginx/conf# 这个文件中定义了一些 http 通信的时候用到环境变量 , nginx 赋值的include fastcgi.conf;}地址信息 :- localhost- 127.0.0. 1- 192.168.1. 100端口 : 找一个空闲的没有被占用的端口即可
2. spawn-fcgi如何启动
# 前提条件 : 程序猿的 fastCGI 程序已经编写完毕 -> 可执行文件 loginspawn-fcgi -a IP 地址 -p 端口 -f fastcgi 可执行程序- IP 地址 : 应该和 nginx 的 fastcgi_pass 配置项对应- nginx: localhost - > IP: 127 .0.0.1- nginx: 127 .0.0.1 - > IP: 127 .0.0.1- nginx: 192 .168.91.130 - > IP: 192 .168.91.130- 端口 :8888应该和 nginx 的 fastcgi_pass 中的端口一致
将标准输入和输出使用dup2()重定向到fastcgi 的读缓冲区和写缓冲区里面。

3. fastCGI程序怎么写
// http://localhost/login?user=zhang3&passwd=123456&age=12&sex=man// 要包含的头文件#include "fcgi_config.h" // 可选#include "fcgi_stdio.h" // 必须的 , 编译的时候找不到这个头文件 , find->path , gcc -I (指定头文件的路径即可)// 编写代码的流程int main (){// FCGI_Accept()是一个阻塞函数 , nginx 给 fastcgi 程序发送数据的时候解除阻塞,while ( FCGI_Accept () >= 0 ){// 1. 接收数据// 1.1 get方式提交数据 - 数据在请求行的第二部分//得到的结果是: user=zhang3&passwd=123456&age=12&sex=manchar * text = getenv ( "QUERY_STRING" );// 1.2 post方式提交数据 --char * contentLength = getenv ( "CONTENT_LENGTH" );//获取数据的长度。// 根据长度大小判断是否需要循环// 2. 按照业务流程进行处理(注册,登录,上传文件进行处理等等)
// 3. 将处理结果发送给 nginx// 数据回发的时候 , 需要告诉 nginx 处理结果的格式 - 假设是 html 格式//Content_type 需要指定。printf ( "Content-type: text/html\r\n" );//必须要加的。printf ( "<html> 处理结果 </html>" );}}

# 部署静态网页1. 制作出来 , 并且部署到对应的资源目录中2. 根据客户端的请求 , 在服务器端添加对应的 location 处理指令 - nginx. conf3. 重新加载 nginx . conf 配置文件客户端请求的 url : http ://xxxx.com/hello/login. html- 去掉协议 : http- 去掉域名 /IP:- 去掉端口- 去掉尾部的文件名
server {listen : 80; # 客户端访问反向代理服务器的时候使用的端口server_name : localhost; # 域名 , 客户端访问反向代理服务器时候 , 使用的地址# 配置如何转发 , 根据客户端的请求的 url 找到对应的转发指令location /{# 设置转发地址proxy_pass http ://test.com;}location / login{# 设置转发地址proxy_pass http ://test.com;}}# 设置代理upstream test. com{# web 服务器的地址信息server 192.168.1.100:80;server 192.168.1.101:80;}# 192.168.1.100 web 服务器http - > serverserver {location /{# 设置转发地址root xxx;}location / login{# 设置转发地址xxxx;}}# 192.168.1.101 web 服务器http - > serverserver {location /{# 设置转发地址root xxx;}location / login{# 设置转发地址xxxx;}}
4其他知识点
1. fastCGI环境变量 - fastcgi.conf

2. 客户端使用Post提交数据常用方式
Http 协议规定 POST 提交的数据必须放在消息主体(entity-body)中,但协议并没有规定数据必须使用什么编码方式。 开发者完全可以自己决定消息主体的格式数据发送出去,还要服务端解析成功才有意义, 服务端通常是根据请求头(headers)中的 Content-Type 字段来获知请求中的消息主体是用何种方式编码,再对主体进行解析。
常用的四种方式
application/x-www-form-urlencoded
# 请求行POST http: //www.example.com HTTP/1.1# 请求头Content-Type: application/x-www-form-urlencoded;charset=utf-8# 空行# 请求数据 ( 向服务器提交的数据 )title=test&user=kevin&passwd=32222
application/json
POST / HTTP/1.1Content-Type: application/json;charset=utf-8{"title": "test","sub":[1,2,3]}
text/xml
POST / HTTP/1.1Content-Type: text/xml<?xml version="1.0" encoding="utf8"?><methodcall><methodname color="red">examples.getStateName</methodname><params><value><i4>41</i4></value></params></methodcall><font color="red">nihao, shijie</font>
multipart/form-data
POST / HTTP/1.1Content-Type: multipart/form-data# 发送的数据------WebKitFormBoundaryPpL3BfPQ4cHShsBz \r\nContent-Disposition: form-data; name="file"; filename="qw.png"Content-Type: image/png\r\n; md5="xxxxxxxxxx"\r\n............. 文件内容 ............................. 文件内容 ................------WebKitFormBoundaryPpL3BfPQ4cHShsBz--Content-Disposition: form-data; name="file"; filename="qw.png"Content-Type: image/png\r\n; md5="xxxxxxxxxx"\r\n............. 文件内容 ............................. 文件内容 ................------WebKitFormBoundaryPpL3BfPQ4cHShsBz--
3. strtol 函数使用
// 将数字类型的字符串 -> 整形数long int strtol ( const char * nptr , char ** endptr , int base );- 参数 nptr : 要转换的字符串 - 数字类型的字符串 : "123" , "0x12" , "0776"//0 开头是8进制,其余是16进制。- 参数 endptr : 测试时候使用 , 一般指定为 NULL- 参数 base : 进制的指定- 10 , nptr = "123456" , 如果是 "0x12" 就会出错- 8 , nptr = "0345"- 16 , nptr = "0x1ff"char* p = "123abc" ;char* pt = NULL ;strtol ( p , & pt , 10 );- 打印 pt 的值 : "abc"//fread(buf,1,stdin);
http://tool.oschina.net/
4linux 搜狗输入法不能使用的的问题
问题
(1)Ubuntu下,搜狗拼音输入法能启动(系统托盘处有图标),但是打不出汉字,打字时选框不正常。
或者
(2)Deepin下,搜狗输入法无法启动,托盘处不显示图标,fcitx运行正常(这个可以通过命令行启动fcitx来验证)。解决方法
删除搜狗拼音输入法的配置文件,并重启输入法。
执行如下指令cd ~/.config find . -name sogou* find . -name Sogou*将两次搜索到的配置文件删除即可。
如果是单独文件,使用rm [文件名]指令,如果是目录,使用rm -R [目录名]指令。备注:
重启fcitx几次,有可能恢复(只能说有可能)。如果不愿意删除配置文件,可以重启fcitx几次试试。fcitx restart &或者在系统托盘的fcitx菜单中点击“重新启动(restart)”。
5 共享库找不到的问题
一般我们在Linux下执行某些外部程序的时候可能会提示找不到共享库的错误, 比如:
error while loading shared libraries: libevent-1.4.so.2: cannot open shared object file: No such file or directory
原因一般有两个, 一个是操作系统里确实没有包含该共享库(lib*.so.*文件)或者共享库版本不对, 遇到这种情况那就去网上下载并安装上即可.
另外一个原因就是已经安装了该共享库, 但执行需要调用该共享库的程序的时候, 程序按照默认共享库路径找不到该共享库文件.
所以安装共享库后要注意共享库路径设置问题, 如下:
1) 如果共享库文件安装到了/lib或/usr/lib目录下, 那么需执行一下ldconfig命令
ldconfig命令的用途, 主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下, 搜索出可共享的动态链接库(格式如lib*.so*), 进而创建出动态装入程序(ld.so)所需的连接和缓存文件. 缓存文件默认为/etc/ld.so.cache, 此文件保存已排好序的动态链接库名字列表.
2) 如果共享库文件安装到了/usr/local/lib(很多开源的共享库都会安装到该目录下)或其它"非/lib或/usr/lib"目录下, 那么在执行ldconfig命令前, 还要把新共享库目录加入到共享库配置文件/etc/ld.so.conf中, 如下:
# cat /etc/ld.so.conf
include ld.so.conf.d/*.conf
# echo "/usr/local/lib" >> /etc/ld.so.conf
# ldconfig
3) 如果共享库文件安装到了其它"非/lib或/usr/lib" 目录下, 但是又不想在/etc/ld.so.conf中加路径(或者是没有权限加路径). 那可以export一个全局变量LD_LIBRARY_PATH, 然后运行程序的时候就会去这个目录中找共享库.
LD_LIBRARY_PATH的意思是告诉loader在哪些目录中可以找到共享库. 可以设置多个搜索目录, 这些目录之间用冒号分隔开. 比如安装了一个mysql到/usr/local/mysql目录下, 其中有一大堆库文件在/usr/local/mysql/lib下面, 则可以在.bashrc或.bash_profile或shell里加入以下语句即可:
export LD_LIBRARY_PATH=/usr/local/mysql/lib:$LD_LIBRARY_PATH
一般来讲这只是一种临时的解决方案, 在没有权限或临时需要的时候使用.
ldd命令可查看执行文件所引用到的动态库情况
相关文章:
C++ 网络编程项目fastDFS分布式文件系统(四)-fastCGI项目相关技术以及linux搜狗输入法相关问题。
目录 1. Nginx作为web服务器处理请求 2. http协议复习 Get方式提交数据 Post方式提交数据 3. fastCGI 3.1 CGI 3.2 fastCGI 3.3 fastCGI和spawn-fcgi安装 1. 安装fastCGI 2. 安装spawn-fcgi 3.4 nginx && fastcgi 4其他知识点 1. fastCGI环境变量 - fas…...
【HarmonyOS】服务卡片 API6 JSUI跳转不同页面
【引言】 “JS卡片支持为组件设置action,包括router事件和message事件,其中router事件用于应用跳。若设置router事件,则action属性值为"router";abilityName为卡片提供方应用的跳转目标Ability名;params中的…...
【linux】debian10安装vim
debian10.0上用apt vim安装vim提示依赖的版本冲突。后来发现是软件源没有添加更新源buster-updates。 以下是问答。 问:debian10怎么安装vim? 答: 在 Debian 10 系统上安装 Vim 的方法很简单,主要有以下两种: 1. 使用 apt 命令安装 bash sudo apt u…...
文件同步工具rsync
文章目录 作用特性安装命令服务端启动增加安全认证及免密登录 实时推送源服务器配置结合inotify实现实时推送 参数详解 学些过程中遇到的问题 作用 rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或…...
【嵌入式开发 Linux 常用命令系列 12 -- linux 下 log 输出重定向 详细介绍 】
文章目录 Linux 输出重定向使用背景Linux 重定向使用介绍 上篇文章:嵌入式开发 Linux 常用命令系列 11 – linux 下 任务与CPU绑定命令 taskset 详细介绍 Linux 输出重定向使用背景 在Linux中,输入和输出重定向是非常常见的操作,它们可以用…...
gin中关于参数注入问题
关于参数注入的问题 如果在开发中一旦发小参数没有按照既定的要求注入到结构体的话,这个时候就一定要看请求方式什么?如果是post请求、 前端—post—json{id:1,pageSize:10,page:1}———————————- 参数注入方法:ShouldBindJSON p…...
记录首次面试2023-08-18
人生第一次面试,大概一个小时左右。没有问我C的,上来一个数据库事务,虽然没有复习,但是还是能够记住一些,主要问的一些事务的隔离级别,以及都有什么作用,我是举例回答的,客户端A和客…...
【Apollo学习笔记】——规划模块TASK之LANE_CHANGE_DECIDER
文章目录 前言LANE_CHANGE_DECIDER功能简介LANE_CHANGE_DECIDER相关配置LANE_CHANGE_DECIDER总体流程LANE_CHANGE_DECIDER相关子函数PrioritizeChangeLaneUpdateStatusIsClearToChangeLaneHysteresisFilter 参考 前言 在Apollo星火计划学习笔记——Apollo路径规划算法原理与实…...
rabbitmq的死信队列
目录 成为死信的条件 消息TTL过期 队列达到最大长度 消息被拒 延迟队列 延迟队列使用场景 消息设置 TTL 队列设置 TTL 两者区别 producer 将消息投递到 broker 或者直接到 queue 里了, consumer 从 queue 取出消息 进行消费,但某些时候由…...
利用网络对拷工具进行系统安装与恢复
各学校计算机机房经常批量安装操作系统和应用软件。实现对批量计算机的安 装,应用较多的是使用 Symantec 的 ghost 企业版。但笔者采用的是网络还原精灵 (Net Recovery Genius)软件附带的网络对拷 Ncp.com 工具,利用它能够轻松实…...
opencv-python使用鼠标点击图片显示该点坐标和像素值IPM逆透视变换车道线二值化处理
OpenCV的鼠标操作 实现获取像素点的功能主要基于OpenCV的内置函数cv2.setMouseCallback(),即鼠标事件回调 setMouseCallback(winname, onMouse,userdata0) winname: 接收鼠标事件的窗口名称 onMouse: 处理鼠标事件的回调函数指针 userdata: 传给回调函数的用户数据…...
AIGC绘画:kaggle部署stable diffusion项目绘画
文章目录 kaggle介绍项目部署edit my copy链接显示 结果展示 kaggle介绍 Kaggle成立于2010年,是一个进行数据发掘和预测竞赛的在线平台。从公司的角度来讲,可以提供一些数据,进而提出一个实际需要解决的问题;从参赛者的角度来讲&…...
微服务概述-7
Shiro 框架 Shiro 是一个用于 Java 应用程序的安全框架。它提供了身份验证、授权、加密和会话管理等功能,可以帮助开发人员构建安全可靠的应用程序。 Java 中针对权限管理常见的有 2 个著名的框架:spring security 和 shiro shiro 基本概念 credentia…...
十二、Linux如何修改文件/文件夹所属用户or用户组?chown命令
目录 1、基础语法 2、修改目标用户: 3、修改用户组: 4、使用-R命令,并同时修改用户/用户组 1、基础语法 chown [-R] [目标用户][:][目标用户组] 被修改文件/文件夹 (1)选项-R:同chmod,对文…...
企业百家号蓝V认证后,百度营销基木鱼落地页如何嵌入百家号中
首先搭建百度营销基木鱼落地页 在我们的百度营销后台,点击基木鱼跳转至百度营销基木鱼页面,在我的站点位置,可以创建H5站点,PC站点等,创建完成后可以点击复制基木鱼落地页的链接。 注意事项 1、企业百家号需要进行…...
Redis缓存读写策略(三种)数据结构(5+3)
Redis缓存读写策略(三种) Cache Aside Pattern(旁路缓存模式) Cache Aside Pattern 是我们平时使用比较多的一个缓存读写模式,比较适合读请求比较多的场景。 写: 先更新 db然后直接删除 cache 。 读 : …...
计算机竞赛 Yolov安全帽佩戴检测 危险区域进入检测 - 深度学习 opencv
1 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 Yolov安全帽佩戴检测 危险区域进入检测 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分工作量:3分创新点:4分 该项目较为新颖&am…...
使用python向窗口发送鼠标点击命令
今天遇到一个问题。公司让用电脑在网页上看个视频。网页有个判断:一段时间没有鼠标活动,视频就会暂停。于是就想,能否隔一段时间就模拟鼠标点击一下视频暂停,再点一下继续播放。省得它自己停止播放。这样我就可以让网页窗口在后台…...
C++11并发与多线程笔记(6) unique_lock(类模板)
C11并发与多线程笔记(6) unique_lock(类模板) 1、unique_lock取代lock_guard2、unique_lock的第二个参数2.1 std::adopt_lock:2.2 std::try_to_lock:2.3 std::defer_lock: 3、unique_lock的成员…...
计算机网络——OSI与TCP/IP各层的结构与功能,都有哪些协议?
文章目录 一 OSI与TCP/IP各层的结构与功能,都有哪些协议?1.1 应用层1.2 运输层1.3 网络层1.4 数据链路层1.5 物理层1.6 总结一下 二 ⭐TCP 三次握手和四次挥手(面试常客)2.1 TCP 三次握手漫画图解2.2 为什么要三次握手⭐2.3 第2次握手传回了ACK,为什么还要传回SYN&…...
AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...

