I am creating a tool for managing my VMs on my ESXi servers. I am parsing the output from popen()
from running vim-cmd
commands.
The issue is when calling fgets()
in a function outside of main()
. If I call it inside of main()
it works without issue.
Code:
int main() {
FILE* fp = NULL;
char path[255] = {0};
char* cmd = "vim-vmd vmsvc/getsummary";
fp = popen(cmd, "r");
if (fp == NULL) {
return -1;
}
int cnt = 0;
while(fgets(path, 255, fp) != NULL) {
printf("%s\n", path);
}
pclose(fp);
return 0;
}
This will work. But if I place all of that code into a function and then call that function from main()
it will seg fault on fgets()
.
This crashes...
void myfunc() {
FILE* fp = NULL;
char path[255] = {0};
char* cmd = "vim-vmd vmsvc/getsummary";
fp = popen(cmd, "r");
if (fp == NULL) {
return;
}
int cnt = 0;
while(fgets(path, 255, fp) != NULL) {
printf("%s\n", path);
}
pclose(fp);
return;
}
int main() {
myfunc();
return 0;
}
I am building this on Ubuntu 12.04 since the glibc version is 2.14 on this version and my ESXi server is 2.17.