/*************************************************************************
> File Name: test.c
> Author: NULL
> Mail: 574889524@qq.com
> Created Time: 2014年11月21日 星期五 20时22分18秒
************************************************************************/
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
#include<stdio.h>
#define TABLE_WIFIDOG_TRUSTED "WiFiDog_$ID$_Trusted"
int safe_vasprintf(char **strp,const char *fmt,va_list ap)
{
int retval;
retval = vasprintf(strp,fmt,ap);
if(retval == -1){
printf("FAIL\n");
exit(-1);
}
return retval;
}
int safe_asprintf(char **strp,const char *fmt,...)
{
va_list ap;
int retval;
va_start(ap,fmt);
retval = safe_vasprintf(strp,fmt,ap);/*这里要给strp分配内存*/
va_end(ap);
return retval;
}
int iptables_do_command(const char *format,...)
{
va_list vlist;
char *fmt_cmd;
char *cmd;
va_start(vlist,format);
safe_vasprintf(&fmt_cmd,format,vlist);/*将每个参数组合到一起*/
va_end(vlist);
safe_asprintf(&cmd,"iptables %s",fmt_cmd);/*格式化输入到cmd*/
printf("%s\n",cmd);
free(fmt_cmd);/*释放两次分配的空间*/
free(cmd);
return 0;
}
int main()
{
iptables_do_command("-t mangle -N " TABLE_WIFIDOG_TRUSTED);
/*两个字符串合并,组成一个字符串*/
return 0;
}
输出:
iptables -t mangle -N WiFiDog_$ID$_Trusted