内容类型
个人空间
版块
Articles
Store
相册
Calendar
下载
博客
墨香年少 发布的所有帖子
-
#include <iostream> #include <string> #include <algorithm> bool is_numeric(std::string const &str) { auto it = std::find_if(str.begin(), str.end(), [](char const &c) { return !std::isdigit(c); }); return !str.empty() && it == str.end(); } int main() { std::string str = "1234567890"; std::cout << std::boolalpha << is_numeric(str) << std::endl; // true return 0; }
-
/server/cgi/include目录下为boost和fastcgi++的include目录 /server/cgi/lib为boost和fastcgi的lib文件
-
1.安装spawn-fcgi-1.6.5 wget https://download.lighttpd.net/spawn-fcgi/releases-1.6.x/spawn-fcgi-1.6.5.tar.xz tar -xf spawn-fcgi-1.6.5.tar.xz cd spawn-fcgi-1.6.5 ./configure make make install 2.安装fastcgi++-2.1 wget http://download.savannah.nongnu.org/releases/fastcgipp/fastcgi++-2.1.tar.bz2 tar -xf fastcgi++-2.1.tar.bz2 cd fastcgi++-2.1 ./configure --disable-shared --enable-static make && make install 3.安装boost_1_64_0 wget https://sourceforge.net/projects/boost/files/boost/1.64.0/boost_1_64_0.tar.gz tar -zxvf boost_1_64_0.tar.gz cd boost_1_64_0 ./bootstrap.sh ./b2 install 编写一个程序测试boost #include <string> #include <iostream> #include <boost/version.hpp> #include <boost/config.hpp> using namespace std; int main() { cout << BOOST_VERSION << endl; //Boost版本号 cout << BOOST_LIB_VERSION << endl; //Boost版本号 cout << BOOST_PLATFORM << endl; //操作系统 cout << BOOST_COMPILER << endl; //编译器 cout << BOOST_STDLIB << endl; //标准库 } 编译 g++ test_boost.cpp -o test_boost 成功会出现如下界面 接下来,写一个cgi文件来测试cgi环境是不是生效 文件名称为main.cpp,代码如下: #include <boost/date_time/posix_time/posix_time.hpp> #include <fstream> #include <fastcgi++/request.hpp> #include <fastcgi++/manager.hpp> void error_log(const char* msg) { using namespace std; using namespace boost; static ofstream error; if(!error.is_open()) { error.open("/tmp/errlog", ios_base::out | ios_base::app); error.imbue(locale(error.getloc(), new posix_time::time_facet())); } error << '[' << posix_time::second_clock::local_time() << "] " << msg << endl; } class HelloWorld: public Fastcgipp::Request<wchar_t> { bool response() { out << "Content-Type: text/html; charset=utf-8\r\n\r\n"; out << "<html><head><meta http-equiv='Content-Type' content='text/html; charset=utf-8' />"; out << "<title>fastcgi++: Hello World in UTF-8</title></head><body>"; out << "<h2>this is a test fastcgi demo</h2>"; out << "</body></html>"; err << "Hello apache error log"; return true; } }; int main() { try { Fastcgipp::Manager<HelloWorld> fcgi; fcgi.handler(); } catch(std::exception& e) { error_log(e.what()); } } 使用如下命令: g++ main.cpp -o main -I/server/cgi/include -L/server/cgi/lib -lfastcgipp -lboost_system -lboost_thread -lpthread 生成了main文件后,配置nginx 使用浏览器查看cgi
-
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <fcntl.h> #include <limits.h> #include <sys/types.h> #include <sys/wait.h> #define BUFSZ 150 void err_quit(char *msg); int main(int argc, char *argv[]) { FILE* fp; int count; char buf[BUFSZ]; char command[150]; sprintf(command, "ps -ef | grep MainServer | grep -v grep | wc -l" ); while(1) { if((fp = popen(command,"r")) == NULL) { err_quit("popen"); } if( (fgets(buf,BUFSZ,fp))!= NULL ) { count = atoi(buf); if(count == 0) { //进程不存在,需要启动 system("/server/mainserver/MainServer &"); printf("已经重新拉起!\n"); } else { //进程存在 printf("进程存在\n"); } } usleep(1000000); //1秒 } pclose(fp); return EXIT_SUCCESS; } void err_quit(char *msg) { perror(msg); exit(EXIT_FAILURE); } 附上守护进程代码: void set_daemon(){ int ret_code = fork(); if (ret_code < 0){ exit(1); }else if (ret_code>0){ exit(0); } setsid(); ret_code = fork(); if (ret_code < 0){ exit(1); }else if (ret_code>0){ exit(0); } chdir("."); umask(0); for(int fd = 0;fd< getdtablesize();fd++){ close(fd); } } int main(int argc, char *argv[]) { set_daemon(); return 0; }
-
std::string UrlEncode(const std::string& szToEncode) { std::string src = szToEncode; char hex[] = "0123456789ABCDEF"; string dst; for (size_t i = 0; i < src.size(); ++i) { unsigned char cc = src[i]; if ( cc >= 'A' && cc <= 'Z' || cc >='a' && cc <= 'z' || cc >='0' && cc <= '9' || cc == '.' || cc == '_' || cc == '-' || cc == '*') { if (cc == ' ') { dst += "+"; } else dst += cc; } else { unsigned char c = static_cast<unsigned char>(src[i]); dst += '%'; dst += hex[c / 16]; dst += hex[c % 16]; } } return dst; } std::string UrlDecode(const std::string& szToDecode) { std::string result; int hex = 0; for (size_t i = 0; i < szToDecode.length(); ++i) { switch (szToDecode[i]) { case '+': result += ' '; break; case '%': if (isxdigit(szToDecode[i + 1]) && isxdigit(szToDecode[i + 2])) { std::string hexStr = szToDecode.substr(i + 1, 2); hex = strtol(hexStr.c_str(), 0, 16); //字母和数字[0-9a-zA-Z]、一些特殊符号[$-_.+!*'(),] 、以及某些保留字[$&+,/:;=?@] //可以不经过编码直接用于URL if (!((hex >= 48 && hex <= 57) || //0-9 (hex >=97 && hex <= 122) || //a-z (hex >=65 && hex <= 90) || //A-Z //一些特殊符号及保留字[$-_.+!*'(),] [$&+,/:;=?@] hex == 0x21 || hex == 0x24 || hex == 0x26 || hex == 0x27 || hex == 0x28 || hex == 0x29 || hex == 0x2a || hex == 0x2b|| hex == 0x2c || hex == 0x2d || hex == 0x2e || hex == 0x2f || hex == 0x3A || hex == 0x3B|| hex == 0x3D || hex == 0x3f || hex == 0x40 || hex == 0x5f )) { result += char(hex); i += 2; } else result += '%'; }else { result += '%'; } break; default: result += szToDecode[i]; break; } } return result; }
-
//自行包含相关代码 void set_daemon(){ int ret_code = fork(); if (ret_code < 0){ exit(1); }else if (ret_code>0){ exit(0); } setsid(); ret_code = fork(); if (ret_code < 0){ exit(1); }else if (ret_code>0){ exit(0); } chdir("."); //一定要切换到当前目录 umask(0); for(int fd = 0;fd< getdtablesize();fd++){ close(fd); } } int main(int argc, char *argv[]) { set_daemon(); /* 自己的业务代码 */ return 0; }
-
使用Ant Design的上传组件提示strict-origin-when-cross-origin跨域的解决方案 一句话:设置headers={{"X-Requested-With":null}} <Upload headers={{"X-Requested-With":null}} action={file_api} listType="picture-card" fileList={this.state.thumbs} onPreview={this.handlePreview} onChange={this.handleChange} > <div><PlusOutlined /><div style={{marginTop: 8,}}>选择文件</div></div> </Upload>
-
在《家有儿女》中,夏东海收到了一笔稿费 10000 元,让 3 个儿女提要求:小雪要租服务器,一年 10000;刘星要笔记本电脑,8000;小雨要带滑梯的床,6000。 看到这里,我真的很想问: 什么样的家庭,会在 2004 年的时候,收到一笔 10000 的稿费,当下就决定全部花掉? 什么样的家庭,会在 2004 年的时候,让几岁和十几岁的孩子,可以放心提出买一个成千上万块的物品的要求? 至少一定是家里都置办全了,且经济上无借债,生活水平相对富裕,且收入可观或稳定的家庭。 重看《家有儿女》,发现了好多细节,都印证了我的想法。 刘梅梳妆台上的化妆品,是资生堂、纪梵希、雅诗兰黛,这些牌子,就是搁现在,也不便宜啊。 刘星买运动鞋,动不动就是耐克或者阿迪,好几次都提到鞋子要 800 甚至 1000 多一双。当时的我连美特斯邦威都买不起。 要知道,这家里可有是 3 个孩子啊,一个孩子的话费都得乘以 3 才行。 家里冰箱常备各种饮料和冰淇淋:芬达、健力宝、高乐高、哈根达斯,就跟超市似的,随开随有。 夏东海的衣服也从来不重样,有次还穿了件 tommy hilfiger,3000 元一件。 刘梅和小雪喜欢吃榴莲,还说要每周都吃。说实在的,2004 年的时候,很多人都不知道榴莲长啥样吧。 一家人吃饭,顿顿四五个菜,多的时候八九个菜,还都是油焖大虾、红烧排骨、香辣蟹之类的,反正什么贵就吃什么,没错的。 人家每次吃水果,每块水果上都插了一根牙签。而我家吃水果,两根牙签吃一盘子水果,我再多拿一根,我妈都打我。 三个小孩每次出去吃饭都要求吃烤鸭,因为 kfc 之类的快餐早就吃腻了。 刘梅有次出国一周,给了夏东海 2000 块钱生活费让他负责全家一周开销。 2000 块一周,我都觉得太高了这标准,没想到人家夏东海 4 天就吃完了。 夏东海日常使用的剃须刀是进口的,刘梅的天天喷的香水是进口的,关键是刘梅还老去国外出差,有一次是去的还是希腊。 刘梅一家不仅物质生活丰裕,精神享受也不能少,他们经常去看个电影,看个魔术现场表演,听个音乐会。业余生活非常丰富。 2004 年看《家有儿女》的时候,就相当羡慕刘星一家,觉得他家真有钱啊。 现在再看的时候,依旧是个羡慕,他家真有钱啊。
-
-
-
-
-
-
-
-
下面的代码是我用Qt加载JsPrinterDll.dll的代码 .h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QLibrary> #include <QMainWindow> QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE //出票机dll方法 typedef int (_stdcall *puniOpenUsb)(); class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); //初始化出票机 void init_printer(); private: Ui::MainWindow *ui; //出票机相关方法 bool PrintDllLoad = false; //加载状态 int printConnect = 0; //连接状态 puniOpenUsb uniOpenUsb = NULL; }; #endif // MAINWINDOW_H .cpp #pragma execution_character_set("utf-8") #include "mainwindow.h" #include "ui_mainwindow.h" #include <QMessageBox> #include <QDebug> #include "Windows.h" MainWindow::MainWindow(QWidget *parent):QMainWindow(parent),ui(new Ui::MainWindow) { ui->setupUi(this); this->setStyleSheet("font-family: \"Microsoft Yahei\";"); //初始化出票机 this->init_printer(); } //初始化出票机 void MainWindow::init_printer() { HINSTANCE JsPrinterDll = LoadLibraryA("JsPrinterDll"); if(JsPrinterDll) { qDebug() << "出票机dll加载......OK"; PrintDllLoad = true; uniOpenUsb = (puniOpenUsb)GetProcAddress(JsPrinterDll, "uniOpenUsb"); printConnect = uniOpenUsb(); if(printConnect >= 1) { qDebug() << "出票机连接......OK"; } else { qDebug() << "出票机连接失败!状态码:" << printConnect; } } else { PrintDllLoad = false; uniOpenUsb = NULL; printConnect = 0; } } MainWindow::~MainWindow() { delete ui; } 输出: 出票机dll加载......OK 出票机连接......OK
-
新建一个cmd的快捷方式 C:\Windows\System32\cmd.exe /A /Q /K D:\QT5\5.15.2\msvc2019\bin\qtenv2.bat 因为我的是32位的,所以直接链接的32位的bat 打开这个cmd,输入命令: D:\QT5\5.15.2\msvc2019\bin\windeployqt.exe D:\DISK\build-DiskClient-Desktop_Qt_5_15_2_MSVC2019_32bit-Release\release\DiskClient.exe 适当调整你的位置,确保exe都是存在的。这样命令后,exe可以直接打开。 如果你有第三方的库,自行把第三方的dll拷贝过去
-
// index.js // 获取应用实例 const app = getApp() Page({ data: { tip:"", wifissid:"", wifibssid:"", }, onLoad() { this.checkWiFi() }, //检测当前wifi checkWiFi() { let that = this wx.getConnectedWifi({ success: function (e) { that.setData({ wifissid: e.wifi.SSID, wifibssid:e.wifi.BSSID, }) }, fail: function (e) { that.setData({ tip: "wifi获取失败" }) } }) } })
-
代码如下: QFontDatabase fontDataBase; QWebEngineSettings *defaultSettings = QWebEngineSettings::globalSettings(); QFont standardFont=fontDataBase.font("Microsoft Yahei","",12); defaultSettings->setFontFamily(QWebEngineSettings::StandardFont, standardFont.family());
-
1、QJsonObject转QString QString str = QString(QJsonDocument doc(jsonObject).toJson(QJsonDocument::Indented)); 2、QString转QJsonObject QString str = "..."; QJsonObject obj = QJsonDocument::fromJson(str.toUtf8()).object(); 3、QJsonArray转QString QString str = QJsonDocument(arr).toJson(QJsonDocument::Compact).constData(); 4、QString转QJsonArray QJsonArray arry = QJsonDocument::fromJson(str.toUtf8()).array();