2014-09-14 6 views
3

Windows 8을 실행하고 cygwin을 사용하여 코드를 컴파일하고 있습니다. system() 명령을 사용하여 명령 줄 명령을 실행하려고합니다. 이것은 간단해야하지만, 놀랍게도 나는 couldnt 할 것 같습니다.C에서 명령 줄 실행

#include <stdio.h> 
#include <string.h> 

int main() 
{ 
    char command[50]; 
    int error = 0; 

    strcpy(command, "cd c:/"); 
    error = system(command); 
    printf("%s\n", command); 
    printf("%d\n", error); 
    while(1) 
    { 
     ; 
    } 

    return(0); 
} 

그러나, 위의 프로그램은 단지 "127"로 변수 오류 및 "/ CD를 C"로 변수 명령을 반환합니다 다음은 내 코드입니다. 출구 코드를 검색하는 일부 Google은 "127"은 명령을 찾을 수 없다는 것을 의미합니다. 나는 완전히 잃어 버렸다. 잠시 동안 수색했지만 C#과 관련된이 문제에 대해서만 질문을 찾을 수 있습니다. 어떻게하면 C 프로그램에서 명령 줄 명령을 실행할 수 있습니까?

편집 : cygwin 명령 줄에서 프로그램을 실행 해봤는데 정상적으로 실행됩니다. 그냥 정상적인 cmd.exe에서 잘못 실행되고 .exe 파일을 두 번 클릭하면됩니다.

+0

[시스템 명령을 사용하여 windows에서 ac 프로그램 내부에서 디렉토리를 변경할 수 있습니다] (http://stackoverflow.com/questions/10811645/changing-the-directory-from-inside-ac-program-under-windows) -using-system-comman) –

+0

링크를 제공해 주셔서 감사합니다! 그러나 여전히 명령이 작동하지 않는 이유를 설명하지 못합니다. –

답변

2

Windows에서 'cd'는 셸의 기본 제공 명령입니다. 쉘을 실행하여 실행해야합니다. this answer도 확인하시기 바랍니다.

편집 :이 같은 쉘을 실행하려면 시스템 명령을 사용할 수 있습니다

system("<fullpath to cmd.exe>\\cmd.exe /c \"your command here\""); 

당신은/C 후 단일 실행 파일을 실행하지 않는 한 그것은 탈출 따옴표 상당히 까다로운 얻을 수 있습니다. 실행 파일 또는 내부 셸 명령에 매개 변수가 필요한 경우 따옴표를 두 번 또는 세 번 이스케이프해야 할 수도 있습니다. |와 같은 일부 특수 문자의 경우 & & (파이프)> (리디렉션) 특수 목적의^이스케이프 문자를 사용해야합니다. Microsoft는이 목적으로 추가했습니다.

다음은 이러한 명령의 예입니다.

다음
system("cmd.exe /c \"start /b shutdown -t 1 -r\""); 

특수 이스케이프와 더 복잡 하나입니다 :이 사람은 약간의 지연 후 Windows를 재부팅

system("cmd.exe /c \"ipconfig ^| find \"IPv4\" ^> C:\Users\someUser\a.txt ^&^& for /f \"tokens=13 delims=: \" %%i in (C:\Users\someUser\a.txt) do echo %%i ^> C:\Users\someUser\ip.txt ^&^& del C:\Users\someUser\a.txt\""); 

이 마지막 하나는 간단한 명령을 사용하여 시스템의 IP를 얻을 수 및 IP에 저장 'someUser'라는 사용자의 홈 디렉토리 아래에서 로터리 방식으로 .txt 파일을 다운로드하십시오.^이스케이프를 확인하십시오.

+0

그건 의미가 있습니다. 링크는 내 목표를 성취하는 방법에 실제로 대답하지 않습니다. 나는 c로 쉘을 여는 방법에 대해 좀 더 조사 할 것이다. 고맙습니다! –

+0

도움을 주셔서 대단히 감사합니다. 그러나 여전히 작동하지 않습니다. 명령 프롬프트에서 실행할 수 있으며 잘 작동하지만 .exe 파일로 실행할 수 있기를 원합니다. 포함해야하는 특정 라이브러리가 있습니까? –

+0

exacty가 작동하지 않습니다. – DNT