2013-07-17 3 views
3

아래와 같이 인수를 지정할 수 있습니까? 여기에 프로그램이 기대하는 방법이 경우에 인수에서 명령 줄 지정

./exe FROM_FILE=true 

, FROM_FILE 값에 해당하는 경우, 내가 파일에서 데이터를 받아 줘야 거짓 경우, I 표준 값을 사용할 수 있습니다. 나는 목적을 위해 찾아 다른 대안은 간단하게 인수를 전달

  1. -options
  2. 을 사용하는 것입니다. 그러나이 경우 나는 논쟁의 순서에 대해 걱정해야한다.

메이크 파일을 할 때이 점이 마음에 들었습니다.

 
$>cat makefile 
exe  : 
     echo ${FROM_FILE} 
$>make FROM_FILE=true 
echo true 
true 
$> 
+0

설정 파일에 대해 생각해 볼 수 있습니다. 'FROM_FILE = true'를 설정 파일 – MOHAMED

답변

5

당신은

FROM_FILE=true ./exe 

을 할 수있는 다음 environ 포인터 나 getenv()와 응용 프로그램 내부에서 FROM_FILE 환경 변수를 읽어 보시기 바랍니다. http://linux.die.net/man/7/environ

+0

에 저장하십시오. 나는 노력했고 이것은 효과가있다.하지만 콘솔에서 응용 프로그램을 시작하지 않으므로 다른 방법을 찾아야합니다. 대신 작업 관리자에게 문의하십시오. 누가 taskman이 이진 이름 [arguments] [arguments]을 실행한다고 예상합니다. – adarsh

0

EDIT : 더 많이 생각할수록 일반적인 명령 줄 인터페이스 규칙을 어기는 것이 좋지 않습니다. 어쩌면 이것을 읽어야합니다 : http://www.gnu.org/prep/standards/html_node/Command_002dLine-Interfaces.html

환경 변수를 사용해 보셨습니까? 라인 인터페이스를 명령하기보다 GNU 틱 접근,

[...] 
char *file = getenv("FROM_FILE"); 
if (file == NULL) 
    *file = DEFAULT; 
[...] 

대안 getopt를 봐, 또는 argp는이 :

당신은

FROM_FILE=true ./exe 

및 exe.c에서 할 수 있습니다. (http://www.gnu.org/software/libc/manual/html_node/Parsing-Program-Arguments.html#Parsing-Program-Arguments)

0

가능합니까? 글쎄, 분명히 (내가 직접 시도하지는 않았지만) 분명히 이 가능하다.. 그것은 분명히 특별한 구문이기 때문에 그것은 어떤 사람들을 떠날지도 모른다.

그러면 원하는 것은 argv[]을 반복하고, something=something 양식의 매개 변수를 찾고 마법을 수행하는 것입니다. 어쩌면 당신이 그들과 함께 끝내고 난 후에 그것들을 제로로 만든 다음, 쓸데없는 일을 getopt이나 그와 비슷한 도서관에 건네는 것 같은 더 일반적인 것을하십시오.

한 가지는이 제네릭되고 싶어요 특히, 고려, 누군가가 파일 이름, 열 처리하거나 당신을 무엇이든 할 수 있다는 기대하는 =가 포함 된 응용 프로그램에 파일 이름을 통과 할 때 무엇을 할 수 있는가의 문제입니다 응용 프로그램은 생활을 위해 않습니다.

0

물론 가능합니다! 다음과 같은 것 (테스트되지 않음) :

int main(int argc, char **argv) 
{ 
    int FROM_FILE = 0; 
    const char *FROM_FILE_key = "FROM_FILE"; 
    int i; 
    /* Iterate through all the arguments. */ 
    for (i = 1; i < argc; ++i) 
    { 
     /* Look for the '='. If not there, skip this argument. */ 
     char *eq = strchr(argv[i], '='); 
     if (!eq) 
      continue; 

     /* Compare the key. If not what we want, skip it. */ 
     if (strncmp(argv[i], FROM_FILE_key, strlen(FROM_FILE_key)) != 0) 
      continue; 

     /* Parse the value. You probably want to make this more flexible 
      (true, 1, yes, y...)*/ 
     if (strcmp(eq+1, "true") == 0) 
      FROM_FILE = 1; 
    } 

    printf("FROM_FILE=%s", FROM_FILE? "true" : "false"); 
} 
관련 문제