请考虑以下代码:
#define LV_INFO(major,minor) lvdisplay -c | grep major':'minor >/root/lvInfo.txt
int main(){
int major=256,minor=6;
system(LV_INFO(major,minor));
return 0;
}
但是上面的代码不能用作系统需要命令作为带双引号的输入参数。
这意味着,
#define LV_INFO(major,minor) "lvdisplay -c|grep major':'minor >/root/lvinfo.txt"
但它也不起作用。它没有通过main()
传递的主要和次要值。
如何在系统调用中使用给定参数运行上述命令?
请帮忙。
答案 0 :(得分:1)
如果您的值(主要和次要)都是常量,您可以简单地将结果字符串化。
#define LV_INFO(major,minor) "lvdisplay -c | grep " STRINGIFY(major) "':'" STRINGIFY(minor) " >/root/lvInfo.txt"
#define MAJOR 256
#define MINOR 6
#define STRINGIFY(a) #a
#define _LV_INFO LV_INFO(MAJOR, MINOR)
#include <stdio.h>
int main(){
printf(_LV_INFO);
return 0;
}
如果你的值不是常数,通过(例如来自命令行参数,这肯定不起作用。例如,你需要从sprintf
构建字符串。
编辑:按照您的命令,这里是如何使用sprintf
构建命令字符串:
int main(){
int major=256,minor=6;
char command[256];
sprintf(command, "lvdisplay -c | grep %d':'%d >/root/lvInfo.txt", major, minor);
system(command);
return 0;
}