使用 C 语言通过 Redis 客户端工具(如 redis-cli)发送一个命令到 Redis 服务器,调用system,如何获取返回的字符串》
时间: 2024-12-24 13:41:14 浏览: 6
在C语言中,使用redis-cli这种客户端工具作为命令行工具来与Redis服务器交互时,通常通过执行shell命令的方式进行。然而,由于`system`函数直接执行外部命令,其返回的是执行命令的退出状态码,而不是命令的实际输出。因此,获取Redis命令的返回字符串并不直接。
当你调用`system(redis_cmd)`时,它会在后台运行`redis-cli`命令,但命令的输出(包括可能的响应字符串)会被定向到终端,而不是程序本身捕获的。要获取Redis的响应,你需要考虑以下几种方法:
1. **捕获输出**:如果你知道`redis-cli`的命令结构,可以创建子进程,使用`popen`, `getline`等函数捕获输出流,逐行读取直到命令完成。这需要对输出流进行适当的管理。
```c
FILE *cmdPipe = popen("redis-cli -s /run/redis/redis.sock GET Redfish:Systems:Self:Memory:DIMM_" mem_num ":Status:State", "r");
if (cmdPipe != NULL) {
char response[256];
while (fgets(response, sizeof(response), cmdPipe)) {
// 解析并处理每行响应
}
pclose(cmdPipe); // 关闭管道
}
```
2. **异步回调**:对于一些支持异步操作的Redis客户端库,如jemalloc的jemalloc_redis,你可以设置回调函数来接收Redis的响应。
3. **依赖第三方库**:使用专门针对网络请求的库,如libcurl,可以更方便地执行HTTP请求,并捕获响应内容。
4. **查看日志**:如果Redis的日志配置允许,你可以查看服务器日志来获取命令的输出。
由于上述方法都需要一定的编程技巧和特定环境的支持,所以如果你是直接使用`system`函数,通常很难直接获取到命令的返回字符串。如果可能的话,建议使用Redis官方提供的客户端API或者其他支持阻塞或非阻塞I/O的客户端库。
阅读全文