2011-04-27 122 views
0

嘿,大家好!即使errcheck將具有非零值,該位代碼始終返回0。如果我使用return 1;它按預期工作。請幫忙?C++不能返回變量

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

下面是完整的代碼:

#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 2011-04-27 18:05:15

+0

顯示函數原型,以及如何檢查返回值。這可能是簽名問題。返回值限制等 – 2011-04-27 18:06:02

+0

好的,我添加了完整的源代碼。 – lupusarcanus 2011-04-27 18:09:57

回答

1

Unix退出狀態限制爲值0-255,即無符號8位整數的範圍。因此,您看不到2048.

請參閱Exit Status維基頁面瞭解更多信息。

+0

那麼,這解決了這個問題。謝謝! 但是,當wget實際返回8時,爲什麼C++將返回狀態視爲2048? – lupusarcanus 2011-04-27 18:46:27

+0

@lupusarcanus:因爲你看的是整數。實際上,該整數具有退出狀態和其他附加信息,編碼爲位。所以要獲得退出狀態號碼,您必須使用某些位,而不是整個位。爲此目的,有一個「WEXITSTATUS」宏(http://www.chemie.fu-berlin.de/chemnet/use/info/libc/libc_23.html)。 – 2011-04-27 19:24:42

+0

非常感謝你Vlad! – lupusarcanus 2011-04-27 19:50:07

0

我懷疑是wget的總是返回0

這是因爲,從HTTP請求的實際錯誤狀態是流。

+0

'下載AUR tarball'libjpeg2'... 無法檢索壓縮包! Errcheck狀態(調試):2048 過程返回0(0x0)執行時間:0.207秒 按ENTER繼續。 – lupusarcanus 2011-04-27 18:21:35

+0

使用libjpeg6完成後,它會成功完成併成功完成。 – lupusarcanus 2011-04-27 18:24:22