2011-04-27 6 views
0

안녕하세요! errcheck의 값이 0이 아니더라도이 코드는 항상 0을 반환합니다. 내가 리턴 1을 사용하면; 그것은 예상대로 작동합니다. 도와주세요?C++에서 변수를 반환 할 수 없습니다.

#include <iostream> 
#include <sys/stat.h> 
#include <sys/types.h> 
#include <stdlib.h> 
#include <string> 
using namespace std; 

int main(int argc, char* argv[]) 
{ 
    umask(0); 
    mkdir("/tmp/.aget", 0755); 
    chdir("/tmp/.aget"); 

    for (int i = 1; i < argc; i++) 
    { 

     string target(argv[i]); 
     string docommand(""); 
     string s1("wget -q http://aur.archlinux.org/packages/"); 
     string s2("/"); 
     string s3(".tar.gz"); 
     docommand += s1; 
     docommand += target; 
     docommand += s2; 
     docommand += target; 
     docommand += s3; 
     cout << "Downloading AUR tarball for '" << target << "'..." << endl; 
     int errcheck = system(docommand.c_str()); 
     if (errcheck != 0) 
     { 
      cerr << "Could not retrieve tarball!" << " Errcheck status (debug): " << errcheck << endl; 
      return errcheck; 
     } 
    } 

    for (int i = 1; i < argc; i++) 
    { 
     string target(argv[i]); 
     string docommand(""); 
     string s1("tar xf "); 
     string s2(".tar.gz"); 
     docommand += s1; 
     docommand += target; 
     docommand += s2; 
     cout << "Extracting '" << target << ".tar.gz'..." << endl; 
     system(docommand.c_str()); 
    } 

    for (int i = 1; i < argc; i++) 
    { 
     string target(argv[i]); 
     string docommand(""); 
     chdir("/tmp/.aget"); 
     chdir(target.c_str()); 
     system("makepkg -csim --noconfirm > /dev/null"); 
    } 

    rmdir("/tmp/.aget"); 

    return 0; 
} 
+1

주변 코드를 표시하십시오.이 코드가있는 함수 또는 메서드의 반환 형식은 무엇입니까? – unwind

+0

함수 프로토 타입을 표시하고 반환 값을 확인하는 방법은 무엇입니까? 그것은 사인 문제 일 수 있습니다. 반환 값 한도 등 –

+0

좋아요, 전체 소스 코드를 추가했습니다. – lupusarcanus

답변

1

유닉스 종료 상태는 부호없는 8 비트 정수의 범위 인 0-255 값으로 제한됩니다. 따라서 2048을 볼 수 없습니다.

자세한 내용은 Exit Status 위키 페이지를 참조하십시오.

+0

글쎄, 그 문제를 해결합니다. 감사! 하지만 C++은 wget이 실제로 8을 반환 할 때 반환 상태를 2048로 보는 이유는 무엇입니까? – lupusarcanus

+0

@ lupusarcanus : 당신이보기 때문에 정수로입니다. 사실, 정수에는 종료 상태와 그 안에 비트로 인코딩 된 다른 추가 정보가 있습니다. 따라서 종료 상태 번호를 얻으려면 전체가 아닌 특정 비트를 사용해야합니다. 그 목적을 위해'WEXITSTATUS' 매크로가 있습니다 (http://www.chemie.fu-berlin.de/chemnet/use/info/libc/libc_23.html). –

+0

정말 고마워요 블라드 !! – lupusarcanus

0

내가 wget을 항상 HTTP 요청에서 실제 오류 상태가 스트림에 있기 때문입니다 0

를 반환 의심 :

int errcheck = system(docommand.c_str()); 
    if (errcheck != 0) 
    { 
     cerr << "Could not retrieve tarball!" << " Errcheck status (debug): " << errcheck << endl; 
     return errcheck; 
    } 

여기에 전체 코드입니다.

+0

' 'libjpeg2'에 대한 AUR 타르를 다운로드 중 ... 타르볼을 가져올 수 없습니다! Errcheck 상태 (디버그) : 2048 프로세스가 0 (0x0) 실행 시간 : 0.207 초 계속하려면 ENTER를 누르십시오. ' – lupusarcanus

+0

libjpeg6을 완료하면 작업이 완료되고 성공적으로 완료됩니다. – lupusarcanus

관련 문제