如何在C ++的system()中使用#define?

时间:2014-04-16 17:52:10

标签: c++ grep c-preprocessor quotes system-calls

请考虑以下代码:

#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()传递的主要和次要值。

如何在系统调用中使用给定参数运行上述命令?

请帮忙。

1 个答案:

答案 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;
}