popen获取文件中指定变量的值:
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#ifdef __DEBUG__
#define msg_print(...) printf(__VA_ARGS__)
#else
#define msg_print(...)
#endif
#define CONF_FILE_PATH "."
#define MAX_VALUE_LEN 32
int joseph_read_conf(const char *key, char *value);
int joseph_read_conf(const char *key, char *value)
{
FILE *stream = NULL;
char cmd[64] = {0};
if(NULL == key || 0 == strlen(key)){
msg_print("invalid parameter!\n");
return -1;
}
sprintf(cmd, "cat %s/ipnc_conf.conf | awk '/%s/{print $2}'",\
CONF_FILE_PATH, key);
msg_print("cmd = %s\n", cmd);
stream = popen(cmd,"r");
if(fread(value, sizeof(char), MAX_VALUE_LEN, stream) <= 0){
pclose(stream);
return -1;
}
strcpy(value + strlen(value) - 1, "\0");
msg_print("value = %s\n",value);
pclose(stream);
}
int main(int argc,char *argv[])
{
char value[32] = {0};
joseph_read_conf(argv[1], value);
printf("value = %s\n",value);
return 0;
}