请考虑以下代码:

#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/

10-10 18:28
查看更多