2014-04-16 2 views
0

다음 코드를 고려하십시오 : C++에서 system()에서 #define을 사용하는 방법은 무엇입니까?

#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

두 값 (상수 및 부수)이 상수이면 단순히 결과를 문자열로 지정할 수 있습니다. 당신의 가치를 통해, 일정하지 않은 경우

#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; 
} 
+0

내가 솔루션을 시도하고 일정한 값으로 잘 작동하지만 내 프로그램이 값은 그래서, 내가 전달하는 시도 런타임에 따라 달라집니다.. main()의 값을 #define으로 사용 - #define LV_INFO (major, minor) "lvdisplay -c | grep"#major " ':" "#minor"> /root/lvInfo.txt "그러나 다시 작동하지 않습니다. 매개 변수의 런타임 값을 가져 오지 않습니다. 그것은 단지 문자열 major와 minor를 명령에 넣습니다. 런타임 값으로 실행하도록 도와주세요. – Ashwini

+0

문자열 값이 컴파일 타임에 발생하기 때문에 런타임 값을 문자열화할 수 없습니다. 필자가 제안한 것처럼'sprintf' 또는 유사한 함수를 사용하여 명령 문자열을 만들어야합니다. – SolarBear

+0

sprintf를 사용하여 문자열을 작성하고 #define에서 사용하는 방법에 대해 자세히 설명 할 수 있습니까 ?? 그것을 exctly하는 방법? – Ashwini