Refactor xy_getcmd()

This commit is contained in:
Aoran Zeng 2023-09-27 11:32:13 +08:00
parent a0f4321921
commit fd6b9c6b9e

50
xy.h
View File

@ -435,47 +435,31 @@ xy_str_strip (const char* str)
/**
* cmd后拿到cmd的执行结果 free掉这段内存
*
* cmd
*
* @note
*/
static char *
xy_getcmd(const char * cmd, bool (*func)(const char*))
static char*
xy_getcmd(const char* cmd, bool (*func)(const char*))
{
const int BUFSIZE = 1024;
const int size = 512;
char* buf = (char*) malloc(size);
FILE *stream;
char* buf = (char*)malloc(sizeof(char)*BUFSIZE);
// 执行命令,并将输出保存到 stream 指针指向的文件中。
stream = popen(cmd, "r");
FILE* stream = popen(cmd, "r");
if (stream == NULL) {
printf("命令执行失败\n");
fprintf(stderr, "命令执行失败\n");
return NULL;
}
// 从 stream 指针指向的文件中读取数据。
char *ret;
do {
if(fgets(buf, sizeof(buf), stream)==NULL)
{
break;
}
if(func==NULL)
{
ret = buf;
}
else
{
if(func(buf))
{
ret = buf;
break;
}
}
}while(1);
char* ret = NULL;
// 关闭 stream 指针。
pclose(stream);
while (true) {
if(NULL==fgets(buf, sizeof(buf), stream)) break;
ret = buf;
if (func) { func(buf); }
}
pclose (stream);
return ret;
}