diff --git a/cfg_parse/cfg_parser.cpp b/cfg_parse/cfg_parser.cpp index f406a0b..97a3d90 100644 --- a/cfg_parse/cfg_parser.cpp +++ b/cfg_parse/cfg_parser.cpp @@ -15563,8 +15563,27 @@ void myQtMsgHandler(QtMsgType type, const char *msg) // ------------------ 自定义 printf 输出 ------------------ // 这里示例:把它当成 normal 级别 => 最终会进入normalList(若开关开) +// 定义一个全局静态的互斥锁,名称为 printfmtx +static pthread_mutex_t printfmtx = PTHREAD_MUTEX_INITIALIZER; + +// RAII风格的锁包装类 +class LockGuard { +public: + explicit LockGuard(pthread_mutex_t& mutex) : mtx(mutex) { + pthread_mutex_lock(&mtx); + } + ~LockGuard() { + pthread_mutex_unlock(&mtx); + } +private: + pthread_mutex_t& mtx; +}; + int customPrintf(const char* format, ...) { + // 在进入函数时自动加锁,退出时自动解锁 + LockGuard lock(printfmtx); + va_list args; va_start(args, format); @@ -15577,7 +15596,7 @@ int customPrintf(const char* format, ...) return -1; } - // 这里让它直接输出到std::cout,从而TeeStreamBuf可以捕获 + // 将格式化后的字符串输出到 std::cout std::cout << buffer << std::endl; return written; diff --git a/json/save2json.cpp b/json/save2json.cpp index fd78d8a..1ef9f85 100644 --- a/json/save2json.cpp +++ b/json/save2json.cpp @@ -1114,7 +1114,7 @@ void execute_bash_debug(string fun,string ip,string type,int proindex) // 构造完整的命令 char command[256]; - snprintf(command, sizeof(command), "%s %s %s %s &", script, param1, param2, param3,param4); + snprintf(command, sizeof(command), "%s %s %s %s %s &", script, param1, param2, param3,param4); std::cout << "command:" << command <valueint; } + std::cout << "proindex is :" << proindex < ",提示符长度为2 + const int promptLength = 2; + // 4) 退格键 if (c == '\x7f' || c == '\b') { - if (!currentCommand.isEmpty()) { + // 仅当 currentCommand 的长度大于提示符长度时,允许删除字符 + if (currentCommand.length() > promptLength) { currentCommand.chop(1); - // 回显退格 + // 回显退格:用 "\b \b" 来擦除屏幕上最后一个字符 clientSocket->write("\b \b"); clientSocket->flush(); } @@ -396,8 +400,7 @@ private: */ void printPrompt(QTcpSocket *clientSocket) { - //clientSocket->write("\r\n> "); - clientSocket->write("\r\x1B[K> "); + clientSocket->write("\n\r\x1B[K> "); clientSocket->flush(); } @@ -420,7 +423,7 @@ private: helpText += "log - Execute rocketmq_test_log\r\n"; helpText += "ledger - Execute ledger with optional terminal_id\r\n"; helpText += "viewlog - View logs (ERROR, WARN, NORMAL, DEBUG)\r\n"; - helpText += "value - Execute value print with valuename\r\n"; + helpText += "value - Execute value print with valuename : frontindex remtable iedcount frontfun log init\r\n"; helpText += "exit - Exit the shell\r\n"; helpText += "help - Show this help message\r\n"; clientSocket->write("\r\x1B[K"); @@ -488,10 +491,10 @@ private: else if (cmd.startsWith("value")) { QStringList parts = cmd.split(" "); if (parts.size() > 1) { - QString variableName = parts[1]; - value_print(variableName.toStdString().c_str(), clientSocket); + QString variableName = parts[1]; clientSocket->write("\r\x1B[K"); clientSocket->write("Executed value with variable name: " + variableName.toUtf8() + "\r\n"); + value_print(variableName.toStdString().c_str(), clientSocket); } else { clientSocket->write("\r\x1B[K"); clientSocket->write("Please provide a variable name\r\n");