2016-10-13 3 views
0

내가 얻으려고하는 것은 C/C++ 프로그램에서 새 터미널을 열고 vim을 실행하는 것입니다. 나는 "xterm -e vim [fname]"을 포킹하고 실행함으로써 이것을 수행한다. 내가 할 수있는대로 시도해보십시오. xterm이 내가 원하는 것을 이해하게 할 수 없습니다.새 터미널 생성 및 vim 열기

int pid = fork(); 
    if (pid){ 
     //parent 
     int retstat; 
     waitpid (pid, &retstat, 0); 
    }else{ 
     //child 

     char* ifname_cchararr = (char*)malloc(ifname.length() + 1); 
     strcpy (ifname_cchararr, ifname.c_str()); 
     char* const argv[4] = {"-e", "vim", ifname_cchararr, NULL}; 
     // std::cout << ifname_cchararr<<std::endl; 
     execvp ("xterm", argv); 
    } 

의 xterm 불평의 프로그램 결과를 실행 :

-e :

다음

는 관련 코드 세그먼트 명시 쉘이 이미는/usr/빈/정력

이었다 - e : 잘못된 명령 행 옵션 "testfile"

그는 어떻게 든는 argc를 엉망으로 한 느낌이 있지만, 실행중인 xterm을 창에 다음과 같은 때문에, 혼란 스러워요 :

의 xterm -e 정력 testfile 위

작품을 완벽하게 정상적으로.

제발 저를 계몽하십시오!

+0

이'argv'에 첫 번째 인수로'xterm' 추가 : 이유에 대한 자세한 내용은 유닉스 & 리눅스에이 최근 묻는 질문을 참조하십시오. – tkausl

+0

@ tkausl oh dearie me. 나는 그것이 이미 함수에 의해 처리되었다고 생각했다. 어리석은 실수. 내가 받아 들일 수 있고 upvote 수 있도록 짧은 대답을 줄 수 있습니까? – user3109672

답변

1

argv에 첫 번째 인수로 xterm을 추가하는 것을 잊었습니다. 약간 이상하게 보일지도 모르는데, argv에 프로그램 이름을 추가해야합니다. 여러분이 이미 호출하고있는 프로그램이 execvp이라고 말했기 때문에, 그렇습니다. Why does argv include the program name

관련 문제