请考虑以下代码:
#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()
传递的major和minor值。如何在系统调用中使用给定参数运行上述命令?
请帮忙。
最佳答案
如果两个值(主要和次要)都是常量,则可以简单地对结果进行字符串化。
#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;
}
关于c++ - 如何在C++中的system()中使用#define?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23116647/