请考虑以下代码:
#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/