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

标签 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() 传递的 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/

相关文章:

两个数字中的最小值的 C 宏

c - 宏 SWAP(t,x,y) 交换两个类型为 t 的参数

gcc - 为什么要在项目中使用#include_next?

c++ - ifstream object.eof() 不工作

c++ - 为什么在 Cocos2d-x 3.2 中无法获取重力值

awk - awk 如何将文件名作为输出中的一列?

bash - 如何合并两个不包含重复项的csv文件

c++ - 为什么所有cout和cin的“未声明标识符

c++ - 收到 GSM 调制解调器响应太迟

regex - 大括号是否有 "but not more"运算符?