HUAYI_BOOL TcpObtainServervalue(int count, ...) { char *resultbuf = malloc(1024); char cmd[TEMP_STR_LEN]; int counter = 0; va_list args; va_start(args, count); strcpy(cmd,"cat /tmp/returnValue"); do { if(counter>10) return HUAYI_FALSE; else if(counter) sleep(1); memset(resultbuf, 0, sizeof(resultbuf)); get_cmd_result(cmd, resultbuf, sizeof(resultbuf)); counter++; }while(! strlen(resultbuf)); for (int i = 0; i < count; i++) { char* str = va_arg(args, char*); //printf("%s\n", str); } va_end(args); unlink("/tmp/returnValue"); return HUAYI_TRUE; } char name1[128]; char name2[128]; char name3[128]; TcpObtainServervalue(3,name1,name2,name3); printf("%s,%s,%s",name1,name2,name3); get_cmd_result函数程序为popen一个进程执行cat /tmp/returnValue命令,并把得到的返回值给resultbuf。帮我优化程序,优化内容为resultbuf得到的返回值以空格分割,并把分割的结果顺序给name1,name2,name3
时间: 2024-04-09 12:33:02 浏览: 43
你可以尝试使用字符串分割函数`strtok`来将`resultbuf`中的字符串按空格进行分割,并将分割后的结果依次赋值给`name1`、`name2`和`name3`。下面是优化后的代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <stdarg.h>
#define TEMP_STR_LEN 100
#define HUAYI_BOOL int
#define HUAYI_TRUE 1
#define HUAYI_FALSE 0
void get_cmd_result(const char* cmd, char* resultbuf, size_t bufsize) {
FILE* fp = popen(cmd, "r");
if (fp) {
fgets(resultbuf, bufsize, fp);
pclose(fp);
}
}
HUAYI_BOOL TcpObtainServervalue(int count, ...) {
char* resultbuf = malloc(1024);
char cmd[TEMP_STR_LEN];
int counter = 0;
va_list args;
va_start(args, count);
strcpy(cmd, "cat /tmp/returnValue");
do {
if (counter > 10)
return HUAYI_FALSE;
else if (counter)
sleep(1);
memset(resultbuf, 0, sizeof(resultbuf));
get_cmd_result(cmd, resultbuf, sizeof(resultbuf));
counter++;
} while (!strlen(resultbuf));
char* token = strtok(resultbuf, " ");
int i = 0;
while (token != NULL && i < count) {
char* str = va_arg(args, char*);
strcpy(str, token);
token = strtok(NULL, " ");
i++;
}
va_end(args);
unlink("/tmp/returnValue");
free(resultbuf);
return HUAYI_TRUE;
}
int main() {
char name1[128];
char name2[128];
char name3[128];
TcpObtainServervalue(3, name1, name2, name3);
printf("%s, %s, %s\n", name1, name2, name3);
return 0;
}
```
这样,`resultbuf`中的返回值将按空格分割,并依次赋值给`name1`、`name2`和`name3`。请注意,我在代码中添加了释放动态分配内存的语句`free(resultbuf)`,以防止内存泄漏。
阅读全文